本文是这次物联网项目的终结篇。本文将演示如何整合以前的文章中的模块和代码,来简单的完成一个物联网项目。最终的实现效果是:利用Iphone手机上的MQTTool App,来获取DHT11的温湿度数据,以及控制继电器的开合。html
在阅读本文前,你可能须要阅读下面的文章:git
须要修改下面的server、port等相关参数,以适配本身实际的使用环境。而后下载到Arduino板中。服务器
#include <stdint.h> #include <Obloq.h> #include <SoftwareSerial.h> #include <dht11.h> #define RELAY_PIN 8 //驱动继电器模块的引脚 #define DHT11_PIN 9 //驱动DHT11传感器的引脚 unsigned long prev_time=0; //上一次发布温湿度的时间 uint8_t temperature ,humidity ; //保存温度和湿度 const String server = "www.lulipro.com"; //MQTT服务器的IP或者主机名 const String port= "1883"; //MQTT服务器的端口 const String iotId = "user1"; //MQTT服务器的用户名 const String iotPwd = "abcd1234"; //MQTT服务器的密码 const String topic_led = "home/led_ctrl"; //订阅的主题 const String topic_dht11 = "home/temp_hum"; //订阅的主题 const String wifiSSID = "TP-LINK12345"; //obloq模块链接的WIFI名,改为你用的WIFI名,最好不要有中文 const String wifiPwd = "aaaabbbb"; //obloq模块链接的WIFI密码,改为你用的WIFI密码 SoftwareSerial obloqModuleSerial(10,11); // 建立一个软串口,用于和obloq模块进行通讯:10是其RX(接Obloq的TX) , 11是其TX(接Obloq的RX) Obloq olq(&obloqModuleSerial,wifiSSID,wifiPwd,server,port,iotId,iotPwd); //若是你须要使用本身的MQTT服务器的话,就使用这个构造函数,并指定MQTT服务器的IP和通讯端口。 //已监听设备的消息回调函数,能够在这个函数里面对接收的消息作判断和相应处理,须要用setMsgHandle()来设置这个回调函数 void msgHandle(const String& topic,const String& message) { if(topic==topic_led) { if(message == "off") //若是收到了关于topic1主题的"off"消息,则关闭继电器 { digitalWrite(RELAY_PIN,LOW); } else if(message == "on") //若是收到了关于topic1主题的"on"消息,则打开继电器 { digitalWrite(RELAY_PIN,HIGH); } } } void setup(void) { obloqModuleSerial.begin(9600); //obloq模块的串口通讯波特率是9600,因此要把软串口的波特率也设置为9600 olq.setMsgHandle(msgHandle);//注册消息回掉函数 olq.subscribe(topic_led); //订阅主题 DHT11_init(DHT11_PIN); pinMode(RELAY_PIN,OUTPUT); digitalWrite(RELAY_PIN,LOW); } void loop(void) { olq.update(); //轮询 if(millis() - prev_time > 2000) //每隔2s发布一次温湿度数据 { if(DHT11_read(&temperature,&humidity)) { olq.publish(topic_dht11,String(temperature)+"&"+String(humidity)); //格式 :温度&湿度 prev_time=millis(); } } }