2021年7月25日 23:32:45
这是一篇来自东北大学准大二工业智能专业学生的文章,今年七月十三日的小学期我们有一个基于esp8266的物联网开发实验,这个实验对于我们来说就是架空的,我们都没有任何基础。https://mp.weixin.qq.com/s?__biz=MzUyMDE1NDg3Mg==&mid=100001983&idx=1&sn=37d93d8a63c54dcb52db68d8487f820d&chksm=79eff3284e987a3e7fb0283732d35d8172f98c5759d07f33d5727ee42d7a2e2e32412189d115&mpshare=1&scene=23&srcid=0709Ps7xf9cHvEh9E4kyB5CQ&sharer_sharetime=1625842130094&sharer_shareid=4d9828b6c08a1decb29477aec3362738#rd
能给我们参考的只有这个微信文章,我们实验的时候做了远程控制LED灯的开关的项目,但是读取温湿度的项目就完不成了。小学期结束之后,我在网上买来了esp8266开发板,自己研究。先是看了太极创客的esp8266的教学视频,但是还是感觉没有任何进展。今晚在搜刮全网文章终于实现用0.96寸的OLED屏幕显示读取到的温度和湿度之后发了一条说说,于是有个大佬指导说发包就行了,实际上就是加一句AliyunIoTSDK::send(“temperature”,t);
下面附上arduino代码
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
//设置用于连接温湿度传感器的引脚
#define DHTPIN 13 //根据硬件连接确定引脚编号(注意,这里我连接的是D7,也就是GPIO13)
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
float h,t;
// 引入 wifi 模块,并实例化,不同的芯片这里的依赖可能不同
#include <ESP8266WiFi.h>
static WiFiClient espClient;
// 引入阿里云 IoT SDK
#include <AliyunIoTSDK.h>
// 设置产品和设备的信息,从阿里云设备信息里查看
#define PRODUCT_KEY "a1d6NurnU3l"
#define DEVICE_NAME "1234"
#define DEVICE_SECRET "44d367e987e17ecbc82bb61a1ea190f2"//(这三个东西在阿里云里面)
#define REGION_ID "cn-shanghai"
// 设置 wifi 信息
#define WIFI_SSID "USTC"//(这里面连你自己家的WiFi,注意要是2.4G频段的,5G的不行)
#define WIFI_PASSWD "20011013a"//(你自己家的WiFi密码)
void setup()
{
Serial.begin(115200);
// 初始化 wifi
wifiInit(WIFI_SSID, WIFI_PASSWD);
// 初始化 iot,需传入 wifi 的 client,和设备产品信息
AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
// 绑定一个设备属性回调,当远程修改此属性,会触发 powerCallback
// PowerSwitch 是在设备产品中定义的物联网模型的 id
AliyunIoTSDK::bindData("PowerSwitch", powerCallback);
// 发送一个数据到云平台,LightLuminance 是在设备产品中定义的物联网模型的 id
AliyunIoTSDK::send("LightLuminance", 100);
pinMode(DHTPIN,INPUT);
dht.begin();
}
void loop()
{
AliyunIoTSDK::loop();
AliyunIoTSDK::send("Temperature",t);
AliyunIoTSDK::send("Humidity",h);
h = dht.readHumidity();
t = dht.readTemperature();
Serial.print("Temperature:");
Serial.println(t);
delay(1000);
Serial.print("Humidity:");
Serial.print(h);
Serial.println("%");
delay(1000);
}
// 初始化 wifi 连接
void wifiInit(const char *ssid, const char *passphrase)
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, passphrase);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("WiFi not Connect");
}
Serial.println("Connected to AP");
}
// 电源属性修改的回调函数
void powerCallback(JsonVariant p)
{
int PowerSwitch = p["PowerSwitch"];
if (PowerSwitch == 1)
{
// 启动设备
}
}
如果你想要同时用阿里云和OLED,就用这个代码
#include
#include
#include
#include
#ifdef U8X8_HAVE_HW_SPI
#include
#endif
#ifdef U8X8_HAVE_HW_I2C
#include
#endif
#include
#include
#include
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ D1, /* data=*/ D2, /* reset=*/ U8X8_PIN_NONE);
//设置用于连接温湿度传感器的引脚
#define DHTPIN 13 //根据硬件连接确定引脚编号
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
float h,t;
// 引入 wifi 模块,并实例化,不同的芯片这里的依赖可能不同
#include
static WiFiClient espClient;
// 引入阿里云 IoT SDK
#include
// 设置产品和设备的信息,从阿里云设备信息里查看
#define PRODUCT_KEY "a1d6NurnU3l"
#define DEVICE_NAME "1234"
#define DEVICE_SECRET "44d367e987e17ecbc82bb61a1ea190f2"
#define REGION_ID "cn-shanghai"
// 设置 wifi 信息
#define WIFI_SSID "USTC"
#define WIFI_PASSWD "20011013a"
void setup()
{
Serial.begin(115200);
// 初始化 wifi
wifiInit(WIFI_SSID, WIFI_PASSWD);
// 初始化 iot,需传入 wifi 的 client,和设备产品信息
AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
// 绑定一个设备属性回调,当远程修改此属性,会触发 powerCallback
// PowerSwitch 是在设备产品中定义的物联网模型的 id
AliyunIoTSDK::bindData("PowerSwitch", powerCallback);
// 发送一个数据到云平台,LightLuminance 是在设备产品中定义的物联网模型的 id
AliyunIoTSDK::send("LightLuminance", 100);
pinMode(DHTPIN,INPUT);
dht.begin();
u8g2.begin();
u8g2.enableUTF8Print();
dht.begin();
}
void loop()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_chinese2);
u8g2.setFontDirection(0);
u8g2.setCursor(0, 15);
u8g2.print("Humidity:");
u8g2.setCursor(80, 15);
u8g2.print(h); //https://blog.zeruns.tech
u8g2.setCursor(120, 15);
u8g2.print("%");
u8g2.setCursor(0, 40);
u8g2.print("Temperature:");
u8g2.setCursor(0, 55);
u8g2.print(t);
u8g2.setCursor(40, 55);
u8g2.print("C");
u8g2.sendBuffer();
delay(1000);
AliyunIoTSDK::loop();
AliyunIoTSDK::send("Temperature",t);
AliyunIoTSDK::send("Humidity",h);
h = dht.readHumidity();
t = dht.readTemperature();
Serial.print("Temperature:");
Serial.println(t);
delay(1000);
Serial.print("Humidity:");
Serial.print(h);
Serial.println("%");
delay(1000);
}
// 初始化 wifi 连接
void wifiInit(const char *ssid, const char *passphrase)
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, passphrase);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("WiFi not Connect");
}
Serial.println("Connected to AP");
}
// 电源属性修改的回调函数
void powerCallback(JsonVariant p)
{
int PowerSwitch = p["PowerSwitch"];
if (PowerSwitch == 1)
{
// 启动设备
}
}