在上一篇的文章中,我们已经完成了硬件开发环境的搭建,并顺利通过了编译,在这篇教程中,我们将开始在云平台中创建物联网应用。
在浏览器中搜索阿里云,注册完账号登陆后打开控制台,并在搜索栏中搜索物联网平台,并点击打开第一个搜索结果
进入物联网控制台后,打开公共实例,找到设备管理菜单栏下的产品,并点击创建产品
接下来,我们点击设备管理菜单栏的设备选项,找到添加设备,产品选择我们刚才创建的产品,DeviceName不能输入中文,之后点击确认即可
创建完成后,我们同样点击查看,复制设备信息中的DeviceName和DeviceSecret,保存到记事本中。此时,阿里云平台的物联网产品已经基本创建完成。
再次打开ardunio程序,将刚才保存的三元组信息即productKey、DeviceName、DeviceSecret复制对应位置,代码中定义WIFI信息的位置,填入自己手机热点的信息,wifi名称建议不要用中文,wifi频段选为2.4Ghz
然后我们需要定义订阅消息的topic,此处我们填入get
#define ALINK_TOPIC_PROP_SET "get" //这个就是我们接收消息的TOPIC
下面还有一个发布数据的topic,格式如下
#define ALINK_TOPIC_PROP_POST "/productKey/DeviceName/user/update" //这个是上传数据的TOPIC
修改完成之后,就可以成功连接到物联网平台,并订阅topic,我们可以通过打开串口,查看打印信息。下面是dht11传感器数据读取函数,可以粘贴到程序最后
void dht11() {
Serial.println("\n");
int chk = DHT11.read(DHT11PIN);
// 测试 DHT 是否正确连接
Serial.print("Read sensor: ");
switch (chk)
{
case DHTLIB_OK:
Serial.println("OK");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println("Checksum error");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.println("Time out error");
break;
default:
Serial.println("Unknown error");
break;
}
// 获取测量数据
Serial.print("Humidity (%): ");
Serial.println((float)DHT11.humidity, 2);
Serial.print("Temperature °C): ");
Serial.println((float)DHT11.temperature, 2);
delay(1000);
}
我们还需要在定义三元组信息的下面定义一下dht11的连接引脚,下图为nodemcu原理图,从原理图找到我们定义的引脚位置
// 设置 DHT 引脚 为 Pin 8
#define DHT11PIN 5
在void loop()函数中添加对dht11数据读取函数的调用
void loop()
{
if (millis() - lastMs >= 5000){
lastMs = millis();
mqtt_check_connect();
mqtt_interval_post(0);
}
dht11();
mqttClient.loop();
}
完成这一步之后,dht11已经可以正常读取数据了,我们还需要将数据进行上报到云端,找到void mqtt_interval_post ( ) 上传数据到云端函数,更改上传数据的格式
//上传数据到云端
void mqtt_interval_post(int a)
{
char param[512];
char jsonBuf[1024];
sprintf(param, "{\"temp\":%2d,\"humi\":%2d}",(int)DHT11.temperature,(int)DHT11.humidity);
Serial.println(param);
mqttClient.publish(ALINK_TOPIC_PROP_POST, param); //这个是上传数据的topic,jsonBuf这个是上传的数据
}
代码的改动已经基本完成,实现将温湿度传感器数据上传的功能,再次点击编译,编译通过后,将代码下载到板子上,连接好传感器,打开热点,数据就能自动上传阿里云物联网平台。