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