锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

基于arduino的智能排插

时间:2022-08-27 02:00:00 传感器电源插座

一个不错的arduino自画板做了一个智能排查项目

使用的组件有esp8266、eda做的pcb版本、降压模块、继电器

用blink控制继电器控制电源开关

代码如下

#define BLINKER_WIFI #include  #include  #include //oled驱动库 #include //IIC库 #include "DHT.h" //加载DHT11的库  #define DHTTYPE DHT11 // 定义传感器 DHT11  #define DHTPIN 12 //宏定义DHT数据接口,编译时DHTPIN会替换成2  int button1Flag = 0; int button2Flag = 0;  DHT dht(DHTPIN, DHTTYPE);//声明 dht 函数(创建对象)  U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);//定义oled屏幕型号  char auth[] = "20a15e6b4d69"; char ssid[] = "MMM"; char pswd[] = "331388572";  BlinkerNumber HUMI("humi");//湿度数据键 BlinkerNumber TEMP("temp");///温度数据键  BlinkerText Button1State("text1");//显示插座1状态 BlinkerText Button2State("text2");//显示插座2状态 BlinkerButton BUTTON1("button1"); BlinkerButton BUTTON2("button2");  float humi = 0, temp = 0;  long now = 0;///当前时间 long lastTime = 0;//上次  //oled刷新 void printOled() {   u8g2.setFont(u8g2_font_crox2hb_tr); //定义字符集   u8g2.setFontDirection(0)//设置字体方向   u8g2.clearBuffer();//清除屏幕缓冲区内容      u8g2.setCursor(10, 20);   u8g2.print("temp:");    u8g2.print(temp);   u8g2.print("C");     u8g2.setCursor(10, 40);   u8g2.print("humi:");    u8g2.print(humi);   u8g2.print("%");     u8g2.sendBuffer() } //心跳包 void heartbeat() {     HUMI.print(humi);     TEMP.print(temp); } //按钮回调函数 void button1_callback(const String & state)  {     BLINKER_LOG("get button state: ", state);     if( button1Flag==0 ){       digitalWrite(13,LOW);//打开按钮1       Button1State.print("状态:开");       button1Flag = 1;     }else{       digitalWrite(13,HIGH);//按键1关闭       Button1State.print("状态:关");       button1Flag = 0;       Blinker.vibrate();     }   } //按钮二回调函数 void button2_callback(const String & state)  {     BLINKER_LOG("get button state: ", state);     if( button2Flag==0 ){       digitalWrite(14,LOW);;//按键2打开       Button2State.print("状态:开");       button2Flag = 1;     }else{       digitalWrite(14,HIGH);;//关闭按钮2       Button2State.print("状态:关");       button2Flag=0;       Blinker.vibrate();     } }  void setup()//程序进来首先执行此函数,只执行一次 {     Serial.begin(115200);/定义硬串口,初始串口波特率为115200     u8g2.begin();//oled驱动显示库初始化     pinMode(13,OUTPUT);//定义IO输出口13口(继电器输入引脚)     digitalWrite(13,HIGH);//IO13口输出高电平(继电器低电平有效)     pinMode(14,OUTPUT);//定义IO输出口14口(继电器输入引脚)     digitalWrite(14,HIGH);//IO14口输出高电平(继电器低电平有效)     u8g2.enableUTF8Print(); // enable UTF8 support for the Arduino print() function//支持UTF-8字符集          BLINKER_DEBUG.stream(Serial);//blinker将日志打印到串口     //BLINKER_DEBUG.debugAll();     Blinker.begin(auth, ssid, pswd);     Blinker.attachHeartbeat(heartbeat);//注册心跳包     BUTTON1.attach(button1_callback);///注册按一回调函数     BUTTON2.attach(button2_callback);//注册按键二回调函数     dht.begin();//dht传感器库的初始化 }  void loop()///程序执行setup()之后会进入这里循环执行,除非程序跑死,否则没有结束。 {     Blinker.run();     now = millis()(ms)     if(now - lastTime >=5000)     {       lastTime = now;       getSensorData()//获取传感器数据       sendSensorDataToBlinker()       printOled();//刷新屏幕     } }  void getSensorData() {   humi = dht.readHumidity()///读取湿度   temp = dht.computeHeatIndex(dht.readTemperature(), humi, false);//读取摄氏度,用摄氏度计算热指数,摄氏度设参数为false    } void sendSensorDataToBlinker() {   HUMI.print(humi);   TEMP.print(temp);   if(digitalRead(13) == LOW){     Button1State.print("状态:开");   }else{     Button1State.print("状态:关");   }   if(digitalRead(14) == LOW){     Button2State.print("状态:开");   }else{     Button2State.print("状态:关");   } }

电路图如下:

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章