本帖最后由 jobszheng5 于 2022-12-6 21:02 编辑
现在家里基本都安装了宽带,也就离不开光猫与路由器,这些基础网络设备。就拿我家来说,有联通公司安装宽带时随机赠送的光猫,还有一个N年前的2.4G的路由器。——没错,就是2.4G的网络。年代久远之后,性能就跟不上潮流了。但我发现,每次重启路由后的一两天,家庭网络性能还是非常不错的。于是,定时手动重启路由便成为了一项家庭任务。
今天开始,这项家庭任务将升级为计划任务。由我们的DFR0868自动执行。兴不兴奋!!
话说三周前,载有DFR0868模块的快递送到了我的手上。这是本人第一次接触ESP32,看到包装后有些惊讶!想到了它很小,但没有想到这么小。
包装一共3部分,DFR0868-A,DFR0868-B与两个排针。比起其它电子产品使用防静电袋来装,感觉这个包装袋更像是装糖果的——也许是新型的防静电袋吧!也说不准。
剪开包装,主角ESP32也就登台了。精致而小巧,非常适用物联网模块等体积受限的应用场景。DFROBOT将其封装成了模块化,更加方便电子工程师进行二次开发,甚至高中生上手也会非常容易。
官方的wiki说明在Arduino IDE的操作流程上面撰写得非常详细。
不过,可能是我家网络的原因,或者众所周知的原因,Arduino在更新ESP32库的过程中几个安装包无法下载,只能采用手动模式一个一个自行下载。浪费了一些时间,减少了一些体验分。
在熟悉了Arduino IDE的开发环境后,我们继续设计了3个测试实验:
实验项目1:数字IO控制
此实验项目,我们在Demo示例中的LED灯闪烁已经完成。本次主要另寻找一个GPIO引脚用做DO数字输出。我们选用Pin2.实验代码如下:
- int led = 10;
- int DO_light = 2;
- void setup() {
- // put your setup code here, to run once:
- pinMode(led, OUTPUT);
- pinMode(DO_light, OUTPUT);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- digitalWrite(led, HIGH);
- digitalWrite(DO_light, HIGH);
- delay(1000);
- digitalWrite(led, LOW);
- digitalWrite(DO_light, LOW);
- delay(1000);
- }
复制代码 实验项目2:连接家中wifi
DFR0868小模块虽然小,但其功能一点也不少。其板载的WiFi模块支持多个协议,IEEE 802.11b/g/n。wifi的模式也有多种,Station模式,SoftAP模式,SoftAP+Station模式。本次项目所使用的为Station模式。在代码中的实现也比较容易。
我们定义好要连接的家庭WiFi的SSID与Password即可。
我使用的手机的wifi热点来做的测试,开机几秒后,DRF0868就成功连接上了,超级快速的。
- #include <WiFi.h>
- const char *ssid = "mi_hengheng";
- const char *password = "www.cirmall.com";
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- Serial.println();
- Serial.println("WiFi connected!");
复制代码 实验项目3:获取网络时间
在设立这个实验项目的时候,还想着需要解析时间校对协议呢!没有想到在ardunio里面使用一个函数就可以轻松解决。不得不说,这种封装下的二次开发真是省心!
- configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
复制代码
理论的知识与原型验证均已通过,下面我们就开始硬件的实践吧!
在经过前面的几个原型验证实验后,我们就可以开始DIY我们的硬件了。
路由器的供电为+9v,不同于我们的ESP32的+5v,需要另外一个独立电源。此应用场景符合弱电的典型应用。因此,我们采用电磁继电器来控制路由器的供电,变向达到重启路由器的目的。
解决了如何控制路由器的问题,剩下就是何时重启的问题了。
根据我的平时作息,我将重启时间设置为了每天凌晨3点,即将每天的秒计数器10800(3*60*60)时,对路由器进行断电,10秒后恢复供电。
还有一个现实问题!最近,正是卡塔尔世界杯时间,凌晨3点又是比赛时间,这里断网重启有点过分。所以,我又设计了取消重启按钮。使用引脚8做为输入信息,当引脚8为高电平时,取消本次重启操作。
是不是文字说明有点多?来一个流程图吧!
最后,上一张实物连接图:
总结
DFR0868模块的ESP32 C3在各种软件与硬件封装下,在ArdunioIDE开发环境下,仅使用少量代码就完成了本次项目的设计。有效集中了80%的精力在20%的核心代码编写,余下的80%,由DFR0868的开发人员帮我们实现了。
软件环境与硬件环境搭建在官方wiki的指导下,一步一步轻松完成。
最后,感谢一下ARROW提供ESP32 C3模块,感谢与非网提供试用机会,感谢与非网的工作人员在发帖与试用过程中的各种耐心细致的指导。
|