前面学习了使用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 11
DHT dht(DHTPIN, DHTTYPE);
void heartbeat()
{
//反馈温度数据
soil_data = analogRead(sensor_Pin); //模拟数据读取(A0脚输入的数据)385-1024
soil_data -= 385; //0-639
soil_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 display
oled.clearDisplay(); // Clear screen
oled.setTextXY(0,0); // Set cursor position, start of line 0
oled.putString("Temp: *C");
oled.setTextXY(1,0); // Set cursor position, start of line 1
oled.putString("Humi: %");
oled.setTextXY(2,0); // Set cursor position, start of line 2
oled.putString("soil: dS/m");
oled.setTextXY(3,0); // Set cursor position, line 2 10th character
oled.putString("C7H8: mg/m3");
BLINKER_DEBUG.stream(Serial);
// 初始化IO
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW); // 初始化 led 高电平 ,则灯熄灭状态
pinMode(LE, OUTPUT);
digitalWrite(LE, HIGH); // 初始化 led 高电平 ,则灯熄灭状态
myservo.attach(servo1); //设置指定io为舵机
myservo.write(servo_close); //控制舵机旋转到指定角度
// 初始化blinker
Blinker.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 position
oled.putString(" ");
oled.setTextXY(0,5);
oled.putNumber(float(t));
oled.setTextXY(1,5); // Set cursor position
oled.putString(" ");
oled.setTextXY(1,5);
oled.putNumber(float(h));
oled.setTextXY(2,5); // Set cursor position
oled.putString(" ");
oled.setTextXY(2,5);
oled.putNumber(float(soil_data));
oled.setTextXY(3,5); // Set cursor position
oled.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上,即使远在千里也能实时查看。
总结
万物互联这个名词听起来就有趣,写这篇博客一方面是记录自己的学习生活,另一方面帮助那些需要的同学也给自己做个备份,加油。
这里也送给大家一句话:
人生就像一只储蓄罐,你投入的每一分努力都会在未来的某一天回馈于你。流年笑掷,未来可期。只有努力奋斗,才会有美好的前程。加油!