• 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();
        }
      }
      
    }
  • 相关阅读:
    虚拟内存分页机制的页面置换
    wait函数的作用
    Kubernetes中Pod生命周期
    ufw 禁用端口未生效
    Kubernetes各个组件的概念
    Kubernetes存储卷的使用
    虚拟内存分页机制的地址映射
    GUNgettext 无效
    响应HTTP服务的shell脚本
    yaml语法
  • 原文地址:https://www.cnblogs.com/lulipro/p/10940138.html
Copyright © 2020-2023  润新知