目录
- ESP8266模组
- 安装 Arduino IDE 编码工具
- 添加ESP8266模组支持
- 配置阿里云
- 编码
- 接入阿里云进行实时温湿度上报
一、ESP8266模组
ESP8266介绍
ESP8266芯片是一款串口转无线模芯片,内部自带固件,用户操作简单,无需编写时序信号等。本次实验我用的是ESP8266-12F系列。这款芯片使用了3.3V的直流电源,体积小,功耗低,支持透传,丢包现象不严重,价格低。ESP8266还允许用户自己编写rom,不仅可以实现数据传输功能,还可控制建立wifi热点,或者作为wifi客户端连接到某指定路由器,同时还可编程控制所以的gpio。
- 技小新ESP8266模组(已经停售,需要去咸鱼平台淘一个),自带温湿度监测器、OLED显示屏、LED灯
- 芯片是采用的是:安信可ESP-12F WIFI芯片
二、安装 Arduino IDE 编码工具
Aruduino IDE官网:
Arduino是创客、业余爱好者和专业人士的平台,可轻松创建微控制器项目。只需要USB连接,这些设备可以通过简单易用的程序轻松编程。由于Arduino IDE提供了广泛的库,因此复杂的部件(如显示器、传感器)以及软件平台(如Adafruit IO)易于使用。
下载之后更换libiary依赖下载的目录:
点击首选项:
更换目录:
开发板管理器地址:http://arduino.esp8266.com/stable/package_esp8266com_index.json
三、添加ESP8266模组支持并下载相关依赖类库
1.添加ESP8266模组支持
ESP82662.6.3点击下载(我这是已经安装好的了)
2.添加相关依赖库
点击项目 -> 加载库 -> 管理库界面
1.PubSubClient
**注意:需要修改PubSubClient源文件!!!**将以下配置修改
首先找到你的依赖安装目录:
2.ArduinoJson
3.U8g2lib
4.DHT sensor library
四、配置阿里云
-
在主页搜索物联网 -
选择生活物联网平台 -
进入控制台(我已经开通了,如果没开通需要开通) -
在控制台中创建新的项目 -
点击创建产品 -
在项目中新增一个产品 -
填好产品信息 -
点击进入产品编辑 -
自定义两个功能 -
人机交互部分直接下一步 -
设置芯片信息 -
设置新增测试设备 -
直接在阿里云中打开物联网平台(不是生活物联平台) -
进入控制台中打开公共实例 -
在这里可以看到我们在飞燕平台中新增的所有产品与设备 -
点击查看设备的详细信息
五、编码
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <U8g2lib.h>
#include "DHT.h"
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
#define sensor_Pin 0
#define DHTPIN 5
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
float h;
float t;
long s;
// 连接WIFI和密码
#define WIFI_SSID "xxxx"
#define WIFI_PASSWD "xxxx"
//对应着阿里云设备的三元组信息
#define PRODUCT_KEY "xxxxxxx"
#define DEVICE_NAME "xxxxxxx"
#define DEVICE_SECRET "xxxxxxx"
//不需要改动
#define REGION_ID "cn-shanghai"
//不需要改
#define MQTT_SERVER PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com"
#define MQTT_PORT 1883
#define MQTT_USRNAME DEVICE_NAME "&" PRODUCT_KEY
//对应阿里云的设备连接信息
#define CLIENT_ID "xxxxxxx"
#define MQTT_PASSWD "xxxxxxx"
#define ALINK_BODY_FORMAT "{\"id\":\"ESP8266\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
unsigned long lastMs = 0;
WiFiClient espClient;
PubSubClient client(espClient);
// 所有没有复位显示板的单板
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=SCL*/ 14, /* data=SDA*/ 2, /* reset=*/ U8X8_PIN_NONE);
float soil_data = 0;
//连接wifi
void wifiInit()
{
//设置WIFI为STA模式
WiFi.mode(WIFI_STA);
//开始尝试连接WIFI 参数是WIFI名称和密码
WiFi.begin(WIFI_SSID, WIFI_PASSWD);
//判断WIFI 状态 不等于连接成功嘛
while (WiFi.status() != WL_CONNECTED)
{
//延迟一秒钟
delay(1000);
//打印WIFI未连接,直到WIFI连接成功跳出循环
Serial.println("WiFi not Connect");
}
//跳出循环后连接MQTT服务器
client.setServer(MQTT_SERVER, MQTT_PORT); //连接MQTT服务器
}
//mqtt连接
void mqttCheckConnect()
{
//测试MQTT连接
while (!client.connected()) //当没有连接上时
{
//进行重试,直到连接成功跳出本循环
client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD);
}
}
void mqttIntervalPost()
{
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; //修改为百分比越大湿度越大
char param[64];
char jsonBuf[256];
read_data();
sprintf(param, "{\"Temperature\":%f , \"Humidity\":%f}",t , h);
//这里\"**"\要选择对应的标识符,否则数据发不过去。
sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
Serial.println(jsonBuf);
//判断是否发送成功
boolean e = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
}
void setup()
{
//初始化串口 串口波特率为115200
Serial.begin(115200);
//初始化WIFI
wifiInit();
//初始化DHT11温湿度计
dht.begin();
//初始化OLED
u8g2.begin();
//开启UTF-8编码方式(效果是可以在OLED屏幕上显示中文)
u8g2.enableUTF8Print();
}
void read_data()
{
float read_h = dht.readHumidity();//湿度
float read_t = dht.readTemperature();//温度
h = read_h;
t = read_t;
//在串口打印温度
Serial.print("湿度:");
Serial.print(h);
//在串口打印湿度
Serial.println("%");
Serial.print("温度:");
Serial.println(t);
u8g2.setFont(u8g2_font_unifont_t_chinese2);
u8g2.setFontDirection(0);
u8g2.firstPage();
do {
//设置OLED位置信息
u8g2.setCursor(15, 35);
//设置OLED位置显示数据
u8g2.print("Temp:");
u8g2.setCursor(55, 35);
u8g2.print((float)t);
u8g2.setCursor(15,55);
u8g2.print("Humi:");
u8g2.setCursor(55, 55);
u8g2.print((float)h);
u8g2.setCursor(97, 35);
u8g2.print("%");
u8g2.setCursor(97, 55);
u8g2.print("%RH");
} while (u8g2.nextPage());
}
void loop()
{
s=millis();
delay(1000);
read_data();
Serial.println(millis()-s);
if (millis() - lastMs >= 5000)
{
lastMs = millis();
//在发送前先检查MQTT连接是否正常
mqttCheckConnect();
//定时发送数据
mqttIntervalPost();
}
client.loop();
//延时2秒钟
delay(2000);
}
六、接入阿里云进行实时温湿度上报
先找到你要烧入程序的串口
然后编译程序
再去阿里云设备信息中可以查看相关的设备信息,以及点击物模型数据可以查看查看数据上报的信息。
|