当前位置: 代码迷 >> 综合 >> ESP8266+Blinker 的万物互联(智能家居篇)
  详细解决方案

ESP8266+Blinker 的万物互联(智能家居篇)

热度:119   发布时间:2023-11-21 19:50:55.0

前面学习了使用ESP8266将温湿度等上传到阿里云平台,于是我想起来了万物互联,就想先做个有关智能家居的,通过查阅资料发现了Blinker(轻松物联网)。下面是演示视频

Esp8266物联网


在这里插入图片描述

文章目录

  • 前言
  • 一、准备
  • 二、操作步骤
    • 1.Blinker配置
    • 2.ESP8266配置
  • 三、效果展示
  • 总结

前言

实现万物互联第一步,千里点灯,然后添加你想要的模块就可以了,接下来我们进入正文。

一、准备

ESP8266开发板
温湿度传感器
MQ-3传感器
土壤湿度传感器
OLED显示屏
灯、继电器、风扇
舵机
稳压模块
电池

这些便是所需要的硬件,软件的话,需要Arduino ide和手机APP点灯Blinker
App直接走应用商城里下载即可

二、操作步骤

1.Blinker配置

在这里插入图片描述
第一步添加独立设备
在这里插入图片描述
这里选择网络接入,然后会生成KEY,保存好这个密钥,接下来会用到
在这里插入图片描述
接下来我们进行相应的配置
在这里插入图片描述
选择你需要的组件即可,你也可以添加自己想要的组件
在这里插入图片描述
这是Blinker端的配置就基本完成了,接下来我们进入ESP8266端。

2.ESP8266配置

具体的配置我不多说了,很简单,这里我直接附上源码。


#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT//
#define BLINKER_WITHOUT_SSL //非SSL加密通信接入,省堆栈 */
#include <Blinker.h>
#include <Servo.h> //加载舵机库 
#include <DHT.h> 
#include <Wire.h>
#include <ACROBOTIC_SSD1306.h>
Servo myservo;                      //定义舵机对象
#define sensor_Pin 0
int servo1 = 16;                    //IO14(D5),用来做控制舵机
int servo_open = 70;                //舵机打开开关的角度,自己可以实际测试,更改适合的角度
int servo_close = 0;                //舵机关闭开关的角度
#define LED 2 // 板子上的灯
#define LE 14 // 板子上的灯float humi_read = 0, temp_read = 0,val,soil_data = 0; 
//下面3项需要根据实际填写
char auth[] = "********"; // blinker app提供的秘钥
char ssid[] = "*******";// wifi 名字
char pswd[] = "******";// wifi 密码// 新建组件对象
BlinkerButton Button1("btn-abc");//注意:要和APP组件’数据键名’一致
BlinkerButton Button2("btn-ab");//注意:要和APP组件’数据键名’一致
BlinkerButton Button3("btn-abcd");//注意:要和APP组件’数据键名’一致
BlinkerButton Button4("btn-a");//注意:要和APP组件’数据键名’一致
BlinkerNumber HUMI("num-e");
BlinkerNumber TEMP("num-d");
BlinkerNumber MQ("num-n");
BlinkerNumber T("num-z");
#define DHTPIN 5 //#define DHTTYPE DHT11 // DHT 11DHT dht(DHTPIN, DHTTYPE);void heartbeat()
{
    //反馈温度数据soil_data = analogRead(sensor_Pin);   //模拟数据读取(A0脚输入的数据)385-1024soil_data -= 385;         //0-639soil_data /= 6.39;        //0.00-100.00,变为百分比soil_data = 100 - soil_data;         //修改为百分比越大湿度越大int analogValue = analogRead(A0);val = 0;HUMI.print(humi_read);//反馈湿度数据TEMP.print(temp_read);MQ.print(val);T.print(soil_data);
}
void button1_callback(const String & state) 
{
    BLINKER_LOG("get button state: ", state);digitalWrite(LED, !digitalRead(LED)); }void button2_callback(const String & state) 
{
    BLINKER_LOG("get button state: ", state);digitalWrite(LE, !digitalRead(LE)); }
void button3_callback(const String & state) 
{
    BLINKER_LOG("get button state: ", state);if (state=="on") {
    myservo.write(servo_open);  // 反馈开关状态Button1.print("on");} else if(state=="off"){
    myservo.write(servo_open);// 反馈开关状态Button1.print("off");}}void button4_callback(const String & state) 
{
    BLINKER_LOG("get button state: ", state);if (state=="on") {
    myservo.write(servo_close);  // 反馈开关状态Button1.print("on");} else if(state=="off"){
    myservo.write(servo_close);// 反馈开关状态Button1.print("off");}}
void setup() 
{
    // 初始化串口,并开启调试信息,调试用可以删除Serial.begin(115200); Wire.begin(12,13);oled.init();                      // Initialze SSD1306 OLED displayoled.clearDisplay();              // Clear screenoled.setTextXY(0,0);              // Set cursor position, start of line 0oled.putString("Temp: *C");oled.setTextXY(1,0);              // Set cursor position, start of line 1oled.putString("Humi: %");oled.setTextXY(2,0);              // Set cursor position, start of line 2oled.putString("soil: dS/m");oled.setTextXY(3,0);             // Set cursor position, line 2 10th characteroled.putString("C7H8: mg/m3");BLINKER_DEBUG.stream(Serial);// 初始化IOpinMode(LED, OUTPUT); digitalWrite(LED, LOW); // 初始化 led 高电平 ,则灯熄灭状态pinMode(LE, OUTPUT); digitalWrite(LE, HIGH); // 初始化 led 高电平 ,则灯熄灭状态myservo.attach(servo1);           //设置指定io为舵机myservo.write(servo_close);       //控制舵机旋转到指定角度// 初始化blinkerBlinker.begin(auth, ssid, pswd);Button1.attach(button1_callback);Button2.attach(button2_callback);Button3.attach(button3_callback);Button4.attach(button4_callback);Blinker.attachHeartbeat(heartbeat);dht.begin();
}void loop() 
{
    Blinker.run();float h = dht.readHumidity();float t = dht.readTemperature();oled.setTextXY(0,5);              // Set cursor positionoled.putString(" ");oled.setTextXY(0,5); oled.putNumber(float(t));       oled.setTextXY(1,5);              // Set cursor positionoled.putString(" ");oled.setTextXY(1,5); oled.putNumber(float(h));  oled.setTextXY(2,5);              // Set cursor positionoled.putString(" ");oled.setTextXY(2,5); oled.putNumber(float(soil_data));  oled.setTextXY(3,5);              // Set cursor positionoled.putString(" ");oled.setTextXY(3,5); oled.putNumber(float(val));  /*if (isnan(h) || isnan(t)){BLINKER_LOG("Failed to read from DHT sensor!");}else{BLINKER_LOG("Humidity: ", h, " %");BLINKER_LOG("Temperature: ", t, " *C");BLINKER_LOG("MQ: ", val, " %");BLINKER_LOG("T: ", soil_data, " %");*/humi_read = h;temp_read = t;//}
}

代码很简单也很好理解,按照代码里的注释操作即可。

三、效果展示

在这里插入图片描述
在这里插入图片描述
可以将温湿度,土壤湿度,甲烷浓度上传到你的手机APP上,即使远在千里也能实时查看。

总结

万物互联这个名词听起来就有趣,写这篇博客一方面是记录自己的学习生活,另一方面帮助那些需要的同学也给自己做个备份,加油。
这里也送给大家一句话:
人生就像一只储蓄罐,你投入的每一分努力都会在未来的某一天回馈于你。流年笑掷,未来可期。只有努力奋斗,才会有美好的前程。加油!