基于arduino的智能排插

该博客介绍了一个使用Arduino自制的智能排查项目,结合ESP8266模块和DHT11温湿度传感器,实现了温湿度监测和继电器控制。通过自画PCB板,项目具备了远程控制电源的功能,并通过 OLED 屏幕实时显示温湿度数据。代码中使用了Blinker库进行数据交互,用户可以通过按钮控制继电器状态,并通过蓝牙接收传感器数据。
摘要由CSDN通过智能技术生成

一个不错的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);//定义IO13口为输出口(继电器输入引脚)
    digitalWrite(13,HIGH);//IO13口输出高电平(继电器低电平有效)
    pinMode(14,OUTPUT);//定义IO14口为输出口(继电器输入引脚)
    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("状态:关");
  }
}

电路图如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值