一个不错的arduino自画板做了一个智能排查项目
使用的组件有esp8266、eda做的pcb版本、降压模块、继电器
用blink控制继电器控制电源开关。
代码如下
#define BLINKER_WIFI #include <Blinker.h> #include <Arduino.h> #include <U8g2lib.h>//oled驱动库 #include <Wire.h>//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("状态:关"); } }
电路图如下: