简介

本文是此次物联网项目的终结篇。本文将演示如何整合之前的文章中的模块和代码,来简单的完成一个物联网项目。最终的实现效果是:利用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=; //上一次发布温湿度的时间
uint8_t temperature ,humidity ; //保存温度和湿度 const String server = "www.lulipro.com"; //MQTT服务器的IP或者主机名
const String port= ""; //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(,); // 创建一个软串口,用于和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(); //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 > ) //每隔2s发布一次温湿度数据
{ if(DHT11_read(&temperature,&humidity))
{
olq.publish(topic_dht11,String(temperature)+"&"+String(humidity)); //格式 :温度&湿度
prev_time=millis();
}
} }

DFRobot模块物联网演示项目整合的更多相关文章

  1. 如何构建多模块的SpringBoot项目

    通过阅读本文你将了解到:如何将已有SpringBoot项目改成多模块 & 如何新构建多模块SpringBoot项目 以下示例基于我正在使用的order(订单服务)进行演示,无论你用的是什么项目 ...

  2. 【转】Nutz | Nutz项目整合Spring实战

    http://blog.csdn.net/evan_leung/article/details/54767143 Nutz项目整合Spring实战 前言 Github地址 背景 实现步骤 加入spri ...

  3. (转)Nutz | Nutz项目整合Spring实战

    http://blog.csdn.net/evan_leung/article/details/54767143 Nutz项目整合Spring实战 前言 Github地址 背景 实现步骤 加入spri ...

  4. (转) shiro权限框架详解06-shiro与web项目整合(上)

    http://blog.csdn.net/facekbook/article/details/54947730 shiro和web项目整合,实现类似真实项目的应用 本文中使用的项目架构是springM ...

  5. Nutz | Nutz项目整合Spring实战

    Nutz项目整合Spring实战 前言 Github地址 背景 实现步骤 加入springMvc与Spring 相关配置 新增Spring相关配置 新增SpringIocProvider 重写Nutz ...

  6. Spring与Web项目整合的原理

    引言: 在刚开始我们接触IOC时,我们加载并启用SpringIOC是通过如下代码手动加载 applicationContext.xml 文件,new出context对象,完成Bean的创建和属性的注入 ...

  7. PMP 第四章 项目整合管理

    1.什么是整合管理,整合什么?如何整合?    项目整合管理包括识别 定义 组合 统一与协调项目管理过组的个过程及项目管理活动二进行的各种过程和活动.    整合兼具统一 合并 连接和一体化的性质,对 ...

  8. 分模块创建maven项目(一)

    maven是一个项目构建和管理的工具. 我们可以通过maven仓库可以实现管理构建(主要是JAR还包括:WAR,ZIP,POM等等). 我们可以通过maven插件可以实现编译源代.产生Javadoc文 ...

  9. Angularjs 异步模块加载项目模板

    ng-lazy-module-seed(Angularjs 异步模块加载项目模板) 相信做过SPA项目的朋友都遇到过这个问题:页面初始化时需要加载文件太大或太多了,许多文件加载后很可能不会运行到,这是 ...

随机推荐

  1. 千万级MySQL数据库建立索引,提高性能的秘诀

    实践中如何优化MySQL 实践中,MySQL的优化主要涉及SQL语句及索引的优化.数据表结构的优化.系统配置的优化和硬件的优化四个方面,如下图所示: SQL语句及索引的优化 SQL语句的优化 SQL语 ...

  2. JDK1.8新特性——Stream API

    JDK1.8新特性——Stream API 摘要:本文主要学习了JDK1.8的新特性中有关Stream API的使用. 部分内容来自以下博客: https://blog.csdn.net/icarus ...

  3. sql基础语句50条

    curdate() 获取当前日期 年月日 curtime() 获取当前时间 时分秒 sysdate() 获取当前日期+时间 年月日 时分秒 */ order by bonus desc limit ( ...

  4. nodejs块级作用域

    现在让我们了解3个关键字var.let.const,的特性和使用方法. var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方声明的,都会提升到当 ...

  5. maven 学习---Maven快照

    大型软件应用程序通常由多个模块组成,这是多个团队工作于同一应用程序的不同模块的常见场景.例如一个团队工作负责应用程序的前端应用用户接口工程(app-ui.jar:1.0)),同时他们使用数据服务工程( ...

  6. flink KMeans算法实现

    更正:之前发的有两个错误. 1.K均值聚类算法 百度解释:k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类 ...

  7. [linux] 多进程和多线程

    1.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段.堆栈段和数据段,这是一种”昂贵”的多任务工作方式.2.而运行于一个进程中的多个线程,它们彼此之间使 ...

  8. echarts-带面积的折线图

    测试地址 https://gallery.echartsjs.com/editor.html?c=x6p5SsIEzt var listN = '高温'; var unit = '°C'; //单位 ...

  9. 201871010132-张潇潇-《面向对象程序设计(java)》第十周总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  10. 【Spring IoC】IoC容器初始化(二)

    Ioc容器的初始化是由refresh()方法来启动的,这个方法标志着Ioc容器的正式启动. 具体来说这个启动过程包括三个基本过程: BeanDefinition的Resource定位 BeanDefi ...