【ESP32教程之BLE】让废旧的电插板Smart

2017-07-065.3万
精华项目
AI 快速预览详细 收起
本教程介绍了如何使用ESP32的BLE通信功能,将废旧电插板改造成智能插座。所需硬件包括FireBeetle-ESP32主控板、Beetle BLE主板等。通过详细的步骤和代码示例,用户可以轻松完成改造,实现远程控制和状态显示。适合零基础新手尝试,无需复杂编程技能。
【ESP32教程之BLE】让废旧的电插板Smart图21

快来瞧瞧,Chocho又放大招啦~~~~~~

【ESP32教程之BLE】让废旧的电插板Smart图1


【ESP32教程之BLE】让废旧的电插板Smart图3


【ESP32教程之BLE】让废旧的电插板Smart图5


       没错,你没看错,这就是基于废旧的电插板改装的,采用ESP32的BLE通信,控制Beetle BLE主板的智能插板,让废旧的电插板秒变智能家居。一直以来,都说ESP32支持WiFi和蓝牙双重通信方式,但始终没有提供Arduino的库文件。作为Arduino小粉的我,着实捏了把汗。这个ESP32设备可以同时控制多个从机设备,我做了两个,亲测没问题。通过RGB灯显示插板是否可以给外面供电,绿色为使能,红色为不使能导通。

       我在想,是不是第一个使用ESP32-BLE来做东西的了???

       视频有点儿长,制作细节部分还是看下面的步骤吧。

所需硬件
       继电器模块
       Beetle BLE
       按键3个
       3D外壳

3D文件和相关的代码文件,点击链接下载,DFRobot_ESP32_WiFiBLE库文件点击下载

制作过程
1、拆卸电源适配器和废旧电插板
     在拆卸电源适配器时,需要用镊子或者尖嘴钳撬开,我用的电源适配器没有螺丝,是直接用胶水固定的,拆的时候废了牛劲。

【ESP32教程之BLE】让废旧的电插板Smart图2

【ESP32教程之BLE】让废旧的电插板Smart图4

拆废旧电插板的步骤大家还是参考视频吧,各个厂家的电插板不一样。

【ESP32教程之BLE】让废旧的电插板Smart图6

【ESP32教程之BLE】让废旧的电插板Smart图7

【ESP32教程之BLE】让废旧的电插板Smart图8

2、电源连接线的制作
    需要找一段家用电线,随便什么型号的都行,然后拆掉外面的漆包线,长度大概在10cm左右。

【ESP32教程之BLE】让废旧的电插板Smart图9

【ESP32教程之BLE】让废旧的电插板Smart图10

【ESP32教程之BLE】让废旧的电插板Smart图11

3、焊接交流电源电线
    将电线的一端焊接到交流电输入处,注意焊锡不要太多,否则会漏到下面的插口连接处。

【ESP32教程之BLE】让废旧的电插板Smart图12

焊接完成后,用斜口钳取下USB供电接口。

【ESP32教程之BLE】让废旧的电插板Smart图13

然后焊接5V电源线,这是给Beetle主板和继电器供电的,并且用热熔胶固定。

【ESP32教程之BLE】让废旧的电插板Smart图14


4、主板元器件的连接
    电路原理图如下,其中D2控制继电器,D3控制RGB灯:
【ESP32教程之BLE】让废旧的电插板Smart图22

中间需要用热熔胶固定继电器、Beetle BLE主板、电插板,细节部分可以参考视频。

【ESP32教程之BLE】让废旧的电插板Smart图15

【ESP32教程之BLE】让废旧的电插板Smart图16

【ESP32教程之BLE】让废旧的电插板Smart图17

【ESP32教程之BLE】让废旧的电插板Smart图18

【ESP32教程之BLE】让废旧的电插板Smart图19

5、下载程序
    源码下载连接请往上看,Beetle BLE程序源码如下:

  1. #include <PlainProtocol.h>
  2. #include <Adafruit_NeoPixel.h>
  3. #define RELAY_PIN 3
  4. #define RGB_PIN 4
  5. enum{
  6.   STOP,
  7.   RUN,
  8.   DEFAULTSTOP
  9. };
  10. enum{
  11.   DEFAULTCOLOR,
  12.   RED,
  13.   GREEN,
  14.   BLUE
  15. };
  16. PlainProtocol mySerial(Serial,115200);
  17. Adafruit_NeoPixel strip = Adafruit_NeoPixel(1, RGB_PIN, NEO_GRB + NEO_KHZ800);
  18. boolean rgbBlink = false;
  19. char currentState = DEFAULTSTOP;
  20. unsigned long current_millis = 0;
  21. /*
  22. * 1->Red 2->Green 3->Blue default->close
  23. */
  24. void setRGBColor(int value){
  25.   switch(value){
  26.     case 1:
  27.        strip.setPixelColor(0, strip.Color(255, 0, 0));
  28.        break;
  29.     case 2:
  30.        strip.setPixelColor(0, strip.Color(0, 255, 0));
  31.        break;
  32.     case 3:
  33.        strip.setPixelColor(0, strip.Color(0, 0, 255));
  34.        break;
  35.     default:
  36.        strip.setPixelColor(0, strip.Color(0, 0, 0));
  37.        break;
  38.   }
  39.   strip.show();
  40. }
  41. void setRelayState(char value){
  42.   if(value == RUN){
  43.     currentState = RUN;
  44.     digitalWrite(RELAY_PIN,HIGH);
  45.     setRGBColor(GREEN);
  46.   }else{
  47.     currentState = STOP;
  48.     digitalWrite(RELAY_PIN,LOW);
  49.     setRGBColor(RED);
  50.   }
  51. }
  52. void updateState(void){
  53.   mySerial.write("STATE",currentState);
  54. }
  55. void blinkLoop(void){
  56.   static int iRGB = 0;
  57.   static int times = 0;
  58.   if(rgbBlink){
  59.     if(iRGB){
  60.      setRGBColor(DEFAULTCOLOR);
  61.     }else{
  62.       if(currentState==DEFAULTSTOP){
  63.         setRGBColor(BLUE);
  64.       }else if(currentState==RUN){
  65.         setRGBColor(GREEN);
  66.       }else if(currentState==STOP){
  67.         setRGBColor(RED);
  68.       }
  69.       if(times > 50){
  70.         rgbBlink = false;
  71.       }
  72.     }
  73.     times++;
  74.   }else{
  75.     setRelayState(currentState);
  76.     times = 0;
  77.   }
  78.   iRGB=~iRGB;
  79. }
  80. void timerRun(void){
  81.   if((millis()- current_millis)>200){
  82.     current_millis = millis();
  83.     blinkLoop();
  84.     updateState();
  85.   }
  86. }
  87. void setup() {
  88.   Serial.begin(115200);
  89.   current_millis = millis();
  90.   strip.begin();
  91.   strip.show();
  92.   pinMode(RELAY_PIN, OUTPUT);
  93.   digitalWrite(RELAY_PIN,LOW);
  94.   setRGBColor(BLUE);
  95. }
  96. void loop() {
  97.   if(mySerial.available()){
  98.     if(mySerial.equals("RELAYSTATE")){
  99.       int value = mySerial.read();
  100.       setRelayState(value);
  101.     }else if(mySerial.equals("SCAN")){
  102.       int value = mySerial.read();
  103.       if(value==1)
  104.        rgbBlink = true;
  105.       else
  106.        rgbBlink = false;
  107.     }
  108.   }
  109.   timerRun();
  110. }
复制代码

FireBeetle Board-ESP32主控板代码如下:
  1. <div align="center"><div align="left">#include "DFRobot_ESP32_BLE.h"
  2. DFRobot_ESP32_BLE ble;
  3. char dataName[15] = {'\0'};
  4. boolean relay1 = false;
  5. boolean relay2 = false;
  6. boolean scan = false;
  7. void scanKeys(void){
  8.   if(digitalRead(D2) == LOW){
  9.     delay(5);
  10.     while(digitalRead(D2) == LOW);
  11.     String sendStr = "<RELAYSTATE>";
  12.     if(relay1 == false){
  13.       sendStr = sendStr+"1;";
  14.       relay1 = true;
  15.     }else{
  16.       sendStr = sendStr+"0;";
  17.       relay1 = false;
  18.     }
  19.     ble.writedata("Chocho1", sendStr);
  20.   }
  21.   
  22.   if(digitalRead(D5) == LOW){
  23.     delay(5);
  24.     while(digitalRead(D5) == LOW);
  25.     String sendStr = "<RELAYSTATE>";
  26.     if(relay2 == false){
  27.       sendStr = sendStr+"1;";
  28.       relay2 = true;
  29.     }else{
  30.       sendStr = sendStr+"0;";
  31.       relay2 = false;
  32.     }
  33.     ble.writedata("Chocho2", sendStr);
  34.   }
  35.   if(digitalRead(D9) == LOW){
  36.     delay(5);
  37.     while(digitalRead(D9) == LOW);
  38.     String sendStr = "<SCAN>";
  39.     if(scan == false){
  40.       sendStr = sendStr+"1;";
  41.       scan = true;
  42.     }else{
  43.       sendStr = sendStr+"0;";
  44.       scan = false;
  45.     }
  46.     ble.writedata("Chocho1", sendStr);
  47.     delay(10);
  48.     ble.writedata("Chocho2", sendStr);
  49.   }
  50.   delay(20);
  51. }
  52. void setup() {
  53.   //Serial.begin(115200);
  54.   pinMode(D2,INPUT);
  55.   pinMode(D5,INPUT);
  56.   pinMode(D9,INPUT);
  57.   ble.setService(0xdfb0);
  58.   ble.setCharacteristic(0xdfb1);
  59.   ble.setconnummax(2);
  60.   ble.setconnectname0("Chocho1");
  61.   ble.setconnectname1("Chocho2");
  62.   ble.init();
  63.   delay(100);
  64.   ble.begin();
  65. }
  66. void loop() {
  67.   String bledata = ble.readdata(dataName);
  68.   if (bledata.length() > 0) {
  69.     if (strncmp(dataName, "Chocho1", strlen("Chocho1")) == 0) {
  70.       //Serial.print("Chocho1:");
  71.       //Serial.println(bledata);
  72.     } else if (strncmp(dataName, "Chocho2", strlen("Chocho2")) == 0) {
  73.       //Serial.print("Chocho2:");
  74.       //Serial.println(bledata);
  75.     }
  76.   }
  77.   scanKeys();
  78. }
  79. </div></div>
复制代码

ps:怎么下载程序,应该不用我说了吧~~~~~~~~~

6、整机组装

     用热熔胶固定插头,然后装进外壳

【ESP32教程之BLE】让废旧的电插板Smart图20

然后,就没有然后了~~~~~~~~~

【ESP32教程之BLE】让废旧的电插板Smart图23

ESP32技术交流群: 619558168

欢迎来踩个人博客:www.seemaker.cn

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(17)
王奕翔
王奕翔
太棒了!
luna
luna
[align=left] [/align][align=left][font=微软雅黑]中文版[/font] : ESP32教程汇总贴[/align][align=left][font=微软雅黑]英文版[/font] : ESP32 tutorial汇总贴[/align][align=left][url=https://www.dfrobot.com.cn/goods-1441.html]
[/url]ESP32教程汇总:
[font=微软雅黑]用于构建[/font]ESP32编译环境的Arduino IDE[/align][align=left]ESP32教程:MicroPython支持[/align][align=left]ESP32 MicroPython教程:连接Wi-Fi网络[/align][align=left]ESP32 MicroPython教程:解析JSON[/align][align=left]ESP32 MicroPython教程:编码JSON[/align][align=left]ESP32 / ESP8266 MicroPython教程:从计算机运行脚本[/align][align=left]ESP32 / ESP8266 MicroPython教程:HTTP GET请求[/align][align=left]ESP32 / ESP8266 MicroPython教程:自动连接WiFi
ESP32 MicroPython教程:使用SHA-256
ESP32 / ESP8266 MicroPython教程:从文件系统运行脚本ESP32 / ESP8266 MicroPython:HTTP POST请求
ESP32 MicroPython教程:用uPyCraft执行脚本
ESP32 MicroPython教程:uPyCraft IDE入门
[font=微软雅黑]【[/font]FireBeetle基础教程】电源供电说明
[font=微软雅黑]如何在树莓派上给[/font]firebeetle esp32编程
[font=微软雅黑]【[/font]ESP-WROOM-32教程—Lesson 1】Arduino IDE for ESP32编译环境的搭建
ESP32项目汇总:
[ESP32酷炫应用] 8X8X8光立方
[font=微软雅黑]关于[/font]Firebeetle Board-ESP32低功耗水果电池的实验
[font=微软雅黑]【[/font]FireBeetle Board-ESP32教程之一】Blynk—控制LED灯
[font=微软雅黑]【[/font]FireBeetle Board-ESP32应用教程】让你的打火机可穿戴
[font=微软雅黑]【[/font]FireBeetle Board-ESP32应用教程】跑步运动的计步神器
[font=微软雅黑]【[/font]ESP32教程之BLE】让废旧的电插板Smart[/align][table]
[tr][td=864][align=center][align=left]【ESP32教程之保险柜】让饮品不再被偷走[/align][align=left]【ESP32教程】音乐播放机[/align][align=left]【ESP32教程】DIY智能机械臂[/align][align=left]ESP32太阳能气象站[/align][align=left]ESP32太阳能气象站[/align][align=left]让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32[/align][align=left]使用FireBeetle Board ESP32 制作电子徽章[/align][/align][/td][/tr]
[/table][align=left][font=微软雅黑]【[/font]ESP8266教程—Lesson 1】Arduino IDE for ESP8266编译环境的搭建
[font=微软雅黑]【[/font]ESP8266教程—Lesson2】智能化你的浇花神器
[font=微软雅黑]【[/font]ESP8266教程—Lesson3】小风扇的变形记
[font=微软雅黑]【[/font]ESP8266教程—Lesson4】大大大事不好啦,8266变电功耗检测器
ESP32测评报告:
[font=微软雅黑]【[/font]FireBeetle Board-ESP32评测报告之一】开箱并驱动oled
[font=微软雅黑]【[/font]FireBeetle Board-ESP32评测报告之二】温度上送物联网OLED显示
[font=微软雅黑]【[/font]FireBeetle Board-ESP32评测报告之三】LED温度表
[font=微软雅黑]【[/font]FireBeetle Board-ESP32评测报告之四】bylnk之桥(心率显示)
[font=微软雅黑]【[/font]FireBeetle Board-ESP32评测之】micropython上传小工具
[font=微软雅黑]【[/font]FireBeetle开箱】ESP32 Wi-Fi+BLE~~~[/align][align=left] [/align]
Trroyet
Trroyet
热熔胶120度融化 pla80度变软 这个作品如果一不小心接了个大功率 然后出门了 很危险
Chocho2017
Chocho2017
作者
回复Trroyet
接灯什么的,就没问题呀。
CJY
CJY
谢谢分享
Mickey
Mickey
没有看到主机的制作过程啊!
Chocho2017
Chocho2017
作者
回复Mickey
主机是在意念中制作的。
创客多多
创客多多
太厉害了,一看就是大侠,但是你剥线的动作太吓人了,好歹也买个剥线钳来吧,哈哈!
Chocho2017
Chocho2017
作者
回复创客多多
呵呵。刀子顺手。
创客火
创客火
不错,支持,只是为什么看第一个图感觉有点污:lol
Chocho2017
Chocho2017
作者
回复创客火
gif没弄好,结果看了下效果,感觉很搞笑,就放上去了,增添喜剧色彩。
oksuyong2006
oksuyong2006
:handshake不错,支持
Chocho2017
Chocho2017
作者
回复oksuyong2006
呵呵,谢谢咯。
xiaohe9527
xiaohe9527
还有BLE模式能不能详细讲一下啊?
Chocho2017
Chocho2017
作者
回复xiaohe9527
你可以扫一下视频后面的微信二维码,加我微信,这样方便沟通。:lol
Chocho2017
Chocho2017
作者
回复xiaohe9527
ESP32的ble是作为主机的,Beetle BLE是作为从机,ESP32直接连接它就好了。
xiaohe9527
xiaohe9527
两块板子有主从机模式吗?
xiaohe9527
xiaohe9527
带码看起来有点累,能不能注释一下啊
xiaohe9527
xiaohe9527
做的真好
Chocho2017
Chocho2017
作者
回复xiaohe9527
谢谢支持。
秦皇岛岛主
秦皇岛岛主
gif大神
ivenlin2017
ivenlin2017
这个必须点个赞!
Chocho2017
Chocho2017
作者
回复ivenlin2017
呵呵,谢谢了啦。
luna
luna
被两针动图戳中笑点~~感觉可以盯着看一个世纪~~
nicho
nicho回复luna
哈哈哈哈哈我也是
Chocho2017
Chocho2017
作者
回复luna
评论内容
hnyzcj
hnyzcj
板凳
Chocho2017
Chocho2017
作者
照例,自己抢个沙发先。
- 没有更多了 -