主要内容

使用粒子光子客户端发布

此示例演示如何将测量值发布到ThingSpeak频道。在本例中,使用粒子光子板和DHT11传感器测量温度和湿度,并使用模拟光传感器测量光强度。如果您有多个要发送到ThingSpeak的传感器值,可以选择将多个值发布到频道提要。或者,如果只有一个传感器,则可以将单个值发布到通道字段。

要求

  • 此示例需要Adafruit DHT版本0.02库与粒子光子或电子一起使用。如果安装最新的adau DHT库,则必须将这些设备的版本降级到0.02。

  • Adafruit DHT版本0.04适用于粒子氩或硼。

设置

创建新频道,如中所示在新通道中收集数据.

代码

1) 包括图书馆MQTT/MQTT.hAdafruit\u DHT/Adafruit\u DHT.h在你的粒子IDE里。

2) 定义粒子光子板上使用的传感器引脚。在本例中,将DHT传感器连接到数字针脚2,将模拟光照传感器连接到模拟针脚A0。

#定义DHTPIN 2//连接到数字引脚2的DHT传感器。#定义DHTTYPE DHT11#定义LIGHTPIN A0//连接到模拟引脚A0的模拟光传感器。

3) 定义用于与ThingSpeak通信的变量。改变mqttPass程序您的MQTT API密钥,可以在账户>我的个人资料. 改变写ikey写入通道的API密钥,并输入信道ID.

char mqttUserName[]=“TSPhotonMQTTDemo”;//使用任何名称。char mqttPass[]=“xxxxxxxxxxxxxx”;//从Account>MyProfile将其更改为mqttapi密钥。char writeAppikey[]=“yyyyyyyyyyyyyyyyyyy”;//将此更改为通道写入API密钥。长channelID=123456;//把这个换成你的频道号码。char server[]=“mqtt.thingspeak.com”;//定义ThingSpeak MQTT代理。static const char alphanum[]=“0123456789”“abcdefghijklmnopqrstuvxyz”“abcdefghijklmnopqrstuvxyz”;//此变量用于随机生成客户端ID。

4) 为MQTT客户机定义回调函数并初始化DHT传感器和客户机。

//定义一个回调函数来初始化MQTT客户机。void回调(char*topic,byte*payload,unsigned int length){}DHT DHT(DHTPIN,DHTTYPE);//初始化DHT传感器。MQTT客户机(服务器,1883,回调);//初始化MQTT客户机。

5) 跟踪上一次连接时间并使用全局变量定义发布数据的时间间隔。

unsigned long lastConnectionTime=0;const unsigned long postingInterval=20L*1000L;//每20秒发布一次数据。在设置方法中初始化DHT传感器的输入引脚。

6) 初始化中DHT传感器的输入引脚设置方法。

void setup(){pinMode(DHTPIN,INPUT);}

7) 建立MQTT连接,并在主服务器中以固定的时间间隔将数据发布到通道功能。

void loop(){//如果MQTT客户机未连接,则重新连接。如果(!client.isConnected()){重新连接();}client.loop();//连续调用循环以建立与服务器的连接。if(millis()-lastConnectionTime>postingInterval){mqttpublish();}}

8) 生成一个唯一的客户机ID,并使用重新连接功能。

void reconnect(){char clientID[9];Serial.println(“正在尝试MQTT连接”);//为(int i=0;i<8;i++){clientID[i]=alphanum[random(51)];}clientID[8]='\0';//连接到ThingSpeak MQTT代理。if(client.connect(clientID,mqttUserName,mqttPass)){Particle.publish(“Conn:”+String(server)+“cl:”+String(clientID)+“Uname:”+String(mqttUserName));}else{Particle.publish(“连接失败。尝试在5秒内重新连接“);延迟(5000);}}

9) 使用MQTT发布方法。如果要发布到频道源,可以一次发布到多个字段。此代码发布到通道的字段1、2和3。如果只有一个传感器,则可以直接发布到单个字段。语法在这里显示的代码中被注释。要直接发布到单个字段,请切换以开头的两行上的注释字符串.

void mqttpublish(){float t=dht.gettempfrenheit();//读取DHT传感器的温度。浮动h=dht.get湿度();//从DHT传感器读取湿度。int lightLevel=模拟读取(LIGHTPIN);//读取光照传感器的电压。//创建数据字符串以将数据发送到ThingSpeak。//使用这些行发布到频道提要,//允许同时更新多个字段。//注释这些行并使用下两行直接发布到单个通道字段。字符串数据=字符串(“field1=“+String(t)+”和field2=“+String(h)+”和field3=“+String(lightLevel));String topic=String(“channels/”+String(channelID)+“/publish/”+String(writePickey))//字符串数据=字符串(t)//String topic=String(“channels/”+String(channelID)+“/publish/fields/field1/”+String(writePickey));发布(主题、数据);lastConnectionTime=millis();}

另请参见

|

相关实例

更多关于