大数跨境
0
0

怎样拯救废旧的电插板,让他变得Smart?

怎样拯救废旧的电插板,让他变得Smart? DF创客社区
2017-07-28
1
导读:没错,你没看错,这就是基于废旧的电插板改装……
欢迎来到服“造”的世界


作者:Chocho2017 

资料来源:www.dfrobot.com.cn




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



 

 

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


       我在想,是不是第一个使用ESP32-BLE来做东西的了???一起来围观一下怎么制作的吧!



所需硬件

  • USB电源适配器5V

  • FireBeetle-ESP32主控板

  • FireBeetle Covers-Proto板

  • 继电器模块

  • Beetle BLE

  • 按键3个

  • 3D外壳


3D文件和相关的代码文件下载请至文末左下角点击“阅读原文”下载)


制作过程

1、拆卸电源适配器和废旧电插板 

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



 

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




 


2、电源连接线的制作 

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


 





3、焊接交流电源电线 

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


 

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


 

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




4、主板元器件的连接 

    电路原理图如下,其中D2控制继电器,D3控制RGB灯:

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







5、下载程序 

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


#include <PlainProtocol.h>

#include <Adafruit_NeoPixel.h>

 

#define RELAY_PIN 3

#define RGB_PIN 4

 

enum{

  STOP,

  RUN,

  DEFAULTSTOP

};

 

enum{

  DEFAULTCOLOR,

  RED,

  GREEN,

  BLUE

};

 

PlainProtocol mySerial(Serial,115200);

Adafruit_NeoPixel strip = Adafruit_NeoPixel(1, RGB_PIN, NEO_GRB + NEO_KHZ800);

 

boolean rgbBlink = false;

char currentState = DEFAULTSTOP;

unsigned long current_millis = 0;

 

/*

 * 1->Red 2->Green 3->Blue default->close

 */

void setRGBColor(int value){

  switch(value){

    case 1:

       strip.setPixelColor(0, strip.Color(255, 0, 0));

       break;

    case 2:

       strip.setPixelColor(0, strip.Color(0, 255, 0));

       break;

    case 3:

       strip.setPixelColor(0, strip.Color(0, 0, 255));

       break;

    default:

       strip.setPixelColor(0, strip.Color(0, 0, 0));

       break; 

  }

  strip.show();

}

void setRelayState(char value){

  if(value == RUN){

    currentState = RUN;

    digitalWrite(RELAY_PIN,HIGH);

    setRGBColor(GREEN);

  }else{

    currentState = STOP;

    digitalWrite(RELAY_PIN,LOW);

    setRGBColor(RED);

  }

}

 

void updateState(void){

  mySerial.write("STATE",currentState);

}

 

void blinkLoop(void){

  static int iRGB = 0;

  static int times = 0;

  if(rgbBlink){

    if(iRGB){

     setRGBColor(DEFAULTCOLOR);

    }else{

      if(currentState==DEFAULTSTOP){

        setRGBColor(BLUE);

      }else if(currentState==RUN){

        setRGBColor(GREEN);

      }else if(currentState==STOP){

        setRGBColor(RED);

      }

      if(times > 50){

        rgbBlink = false;

      }

    }

    times++;

  }else{

    setRelayState(currentState);

    times = 0;

  }

  iRGB=~iRGB;

}

 

void timerRun(void){

  if((millis()- current_millis)>200){

    current_millis = millis();

    blinkLoop();

    updateState();

  }

}

 

void setup() {

  Serial.begin(115200);

  current_millis = millis();

  strip.begin();

  strip.show(); 

  pinMode(RELAY_PIN, OUTPUT);

  digitalWrite(RELAY_PIN,LOW);

  setRGBColor(BLUE);

}

 

void loop() {

  if(mySerial.available()){

    if(mySerial.equals("RELAYSTATE")){

      int value = mySerial.read();

      setRelayState(value);

    }else if(mySerial.equals("SCAN")){

      int value = mySerial.read();

      if(value==1)

       rgbBlink = true;

      else

       rgbBlink = false;

    }

  }

  timerRun();

}



FireBeetle Board-ESP32主控板代码如下:


#include "DFRobot_ESP32_BLE.h"

DFRobot_ESP32_BLE ble;

char dataName[15] = {'\0'};

 

boolean relay1 = false;

boolean relay2 = false;

boolean scan = false;

 

void scanKeys(void){

  if(digitalRead(D2) == LOW){

    delay(5);

    while(digitalRead(D2) == LOW);

    String sendStr = "<RELAYSTATE>";

    if(relay1 == false){

      sendStr = sendStr+"1;";

      relay1 = true;

    }else{

      sendStr = sendStr+"0;";

      relay1 = false;

    }

    ble.writedata("Chocho1", sendStr);

  }

   

  if(digitalRead(D5) == LOW){

    delay(5);

    while(digitalRead(D5) == LOW);

    String sendStr = "<RELAYSTATE>";

    if(relay2 == false){

      sendStr = sendStr+"1;";

      relay2 = true;

    }else{

      sendStr = sendStr+"0;";

      relay2 = false;

    }

    ble.writedata("Chocho2", sendStr);

  }

 

  if(digitalRead(D9) == LOW){

    delay(5);

    while(digitalRead(D9) == LOW);

    String sendStr = "<SCAN>";

    if(scan == false){

      sendStr = sendStr+"1;";

      scan = true;

    }else{

      sendStr = sendStr+"0;";

      scan = false;

    }

    ble.writedata("Chocho1", sendStr);

    delay(10);

    ble.writedata("Chocho2", sendStr);

  }

  delay(20);

}

 

void setup() {

  //Serial.begin(115200);

  pinMode(D2,INPUT);

  pinMode(D5,INPUT);

  pinMode(D9,INPUT);

  ble.setService(0xdfb0);

  ble.setCharacteristic(0xdfb1);

  ble.setconnummax(2);

  ble.setconnectname0("Chocho1");

  ble.setconnectname1("Chocho2");

  ble.init();

  delay(100);

  ble.begin();

}

 

void loop() {

  String bledata = ble.readdata(dataName);

  if (bledata.length() > 0) {

    if (strncmp(dataName, "Chocho1", strlen("Chocho1")) == 0) {

      //Serial.print("Chocho1:");

      //Serial.println(bledata);

    } else if (strncmp(dataName, "Chocho2", strlen("Chocho2")) == 0) {

      //Serial.print("Chocho2:");

      //Serial.println(bledata);

    }

  }

  scanKeys();

}




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


6、整机组装 

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




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



  ESP32技术交流QQ群:  

 619558168 



*欢迎转发朋友圈。如需转载,请注明出处和原作者。


更多项目干货戳这里

气温指示项链 | 懂植物情感的机器喵

DIY简易打击垫"LaunchBox"

智能穿戴—能将日记可视化的连衣裙

萌妹纸的体感猫耳朵 | 3D打印银河护卫队萌宠Groot 

企鹅机器人   |  台湾创客的桌面神器 | 调酒机器人

雾霾自救  VR黑科技  |  OTTO  |  宠物机器人


点击“阅读原文”,更多精彩等着你

【声明】内容源于网络
0
0
DF创客社区
我们是专注于创新和开源硬件开发的公司——DFRobot成立的创客社区,无论你是资深创客还是小白,这里都有你的一席之地。一个人玩自己的项目,你只是寂寞宅;一群人看你玩项目,你就是技术牛!快来分享你的项目吧!
内容 1282
粉丝 0
DF创客社区 我们是专注于创新和开源硬件开发的公司——DFRobot成立的创客社区,无论你是资深创客还是小白,这里都有你的一席之地。一个人玩自己的项目,你只是寂寞宅;一群人看你玩项目,你就是技术牛!快来分享你的项目吧!
总阅读2.1k
粉丝0
内容1.3k