DFRobot模塊物聯網演示項目整合


簡介

本文是此次物聯網項目的終結篇。本文將演示如何整合之前的文章中的模塊和代碼,來簡單的完成一個物聯網項目。最終的實現效果是:利用Iphone手機上的MQTTool App,來獲取DHT11的溫濕度數據,以及控制繼電器的開合。

在閱讀本文前,你可能需要閱讀下面的文章:

注備工作

  1. 將DHT11庫安裝到Arduino的開發環境中
  2. 將Obloq庫安裝到Arduino的開發環境中
  3. 已經搭建好MQTT服務器,且能完成MQTT通信
  4. 按照前面文章中的電路圖連接好所有的模塊 ,引腳可以根據需要調整
  5. 手機上安裝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();
    }
  }
  
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM