简介
本文是此次物联网项目的终结篇。本文将演示如何整合之前的文章中的模块和代码,来简单的完成一个物联网项目。最终的实现效果是:利用Iphone手机上的MQTTool App,来获取DHT11的温湿度数据,以及控制继电器的开合。
在阅读本文前,你可能需要阅读下面的文章:
注备工作
- 将DHT11库安装到Arduino的开发环境中
- 将Obloq库安装到Arduino的开发环境中
- 已经搭建好MQTT服务器,且能完成MQTT通信
- 按照前面文章中的电路图连接好所有的模块 ,引脚可以根据需要调整
- 手机上安装MQTT客户端软件,例如IOS平台的MQTTool
代码
需要修改下面的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();
}
}
}