Obloq模块:基于ESP8266的物联网模块
OBLOQ 物联网模块
OBLOQ模块是DFRobot公司开发的一款基于ESP8266芯片的物联网通信模块。模块使用串口(TTL UART)和Arduino(或者其他单片机)通信,支持MQTT,HTTP等协议,可以很方便的访问互联网,快速搭建物联网项目。
技术规格:
- 供电电压:3.3~5.0V
- 工作电流:<240mA
- 接口类型:Gravity UART 4PIN
- 接口速率:9600
- 无线模式:IEEE802.11b/g/n
- 加密类型:WPA WPA2/WPA2–PSK
- 无线频率:2.4GHz(不要连接5G Wi-Fi)
- 产品尺寸:35mm * 32mm / 1.38inch * 1.26inch
- 内置协议:TCP/IP 协议栈
引脚定义:
引脚编号 | 引脚名 | 作用 |
---|---|---|
1 | TX | 串口发送 |
2 | RX | 串口接收 |
3 | GND | 电源地 |
4 | Vcc | 电源正 |
ESP8266是乐鑫公司开发的一款带Wi-Fi功能的主控芯片,所以里面也跑有程序(或者叫固件:Firmware)。但是ESP8266的开发环境还不够普及,开发难度较大,所以通常会将ESP8266设计成一个单独的网络模块去使用(相当于作为单片机主控的无线网卡)。市面上比较流行是安信可公司的ESP8266模块,烧写了支持AT命令的固件,那么单片机主控就可以通过UART发送AT命令来控制和使用ESP8266。OBLOQ模块默认烧写了DFRobot公司自己开发的固件,其使用格式化的字符串形式的调用接口,而非AT命令。
Obloq模块如何与Arduino配合使用?
Obloq是一个物联网模块,而非主控。所以,Obloq只是充当了Arduino主控(或者其他单片机主控)的一个“助手”——帮助主控完成网络通信。那么,主控芯片以何种方式传递命令给Obloq,以及Obloq有哪些支持的命令呢?
我们通过下面一个类比来说明:
主人通过说话的方式,发出命令传达给狗子小黄,小黄听到命令后就会里面完成相应的动作。Arduino将命令字符串通过串口发送给Obloq模块,模块收到命令后,执行对应的操作。
如果主人对狗子小黄说:“跳舞”,然而主人从没有给小黄训练过跳舞,所以小黄不会有所反应,它不懂。如果Arduino通过串口给Obloq发送“I love u”,Obloq模块也不会做出任何动作,因为Obloq烧写的固件里没有这条指令,它无法识别。
Obloq命令字符串举例(点击查看完整的命令表)
命令字符串 | 命令作用 |
---|---|
"|2|1|wifi_ssid,wifi_pwd|\r" |
连接一个指定的WIFI,例如: "|2|1|myWIFI,123456|\r" 将命令Obloq模块连接名称为myWIFI,密码为123456的WIFI |
"|2|2|\r" |
命令Obloq模块断开当前连接的WIFI |
"|4|1|1|host|port|iotid|iotpwd|\r" |
连接到一个MQTT Broker。 host是服务器的主机名或者IP地址; port是MQTT Broker的端口; iotid是建立MQTT连接使用的用户名; iotpwd是建立MQTT连接使用的密码; |
为了形成对比,再来看一下安信可ESP8266官方使用的AT命令
AT命令 | 命令作用 |
---|---|
"AT+CWJAP=<wifi_ssid>,<wifi_pwd>\r\n" |
连接一个指定的WIFI,例如: "AT+CWJAP=\"myWIFI\",\"123456\"\r\n" 将命令ESP8266模块连接名称为myWIFI,密码为123456的WIFI。 注意双引号里面嵌套的双引号要用转意字符。 |
"AT+CWQAP\r\n" |
断开与当前WIFI的连接 |
所以我们可以得出以下结论:
1、调用接口就是ESP8266固件里面预定义的命令的集合,这些命令由主控通过串口下发,有的命令执行后ESP8266还会回传执行状态给主控。当然这里的解释只限于本文涉及到的context。
2、Obloq和Arduino(或其他单片机)主控之间通过串口来作为命令和响应的传输通道。
3、模块只能识别和执行它的固件中定义的命令,不同的固件支持的命令可能不同,命令的表现形式也可能不同。
实验
Ardunio或兼容Arduino的开发板都有一颗板载的LED,通常是用pin13驱动的,Arduino核心库中的LED_BUILTIN宏定义了驱动板载LED的引脚,隔离和平台差异。本实验将通过MQTT协议来远程点亮和熄灭板载LED。
通过串口发送命令给Obloq来命令其工作依然是很繁琐的,庆幸的是DFRobot开发出了一个封装了串口命令的C++库:Obloq库。使得我们不用关心底层的串口命令,更加的方便快速的使用OBLOQ模块。
我们可以在DFRobot的官方Github页面下载Obloq模块的Arduino驱动库。只需要下载其中的Qbloq.cpp和Qbloq.h文件即可,如下图所示:
接下来安装Obloq驱动库到Arduino开发环境。步骤:在Ardiono安装目录下的【libraries】目录下新建一个文件夹【DFRobot_Obloq】(名称任意),然后将下载的Qbloq.cpp和Qbloq.h文件放进去即可。如下图:
接下来我们要去DFRobot的Easy IOT平台注册账号,注册后登录,网页右上角有注册 /登录按钮:
登录后进入工作间 :
操作步骤:
1、复制【工作间】里的iot_id和iot_pwd替换下面代码中的"bbbbbbbbb" 和 "cccccccccc" 。
2、在【工作间】添加一个设备,复制topic替换下面代码中的"aaaaaaaaa"。
3、将下面代码中的“myWIFI”和"123456"改为自己使用的WIFI名和WIFI密码。
4、连接好电路后(见下面的接线图),将代码下载到Arduino板中。
5、在【工作间】点击新建设备的【发送消息按钮】,分别发送on 和 off,观察Arduino开发板上的LED的状态。
实验接线图:
实验代码:
#include <stdint.h>
#include <Obloq.h>
#include <SoftwareSerial.h> const String topic1 = "aaaaaaaaa"; //订阅的主题,需要在【工作间】里添加一个设备后得到 const String iotId = "bbbbbbbbb"; //MQTT服务器的用户名,在【工作间】里的iot_id可以查看
const String iotPwd = "cccccccccc"; //MQTT服务器的密码,在【工作间】里的iot_pwd可以查看 const String wifiSSID = "myWIFI"; //obloq模块连接的WIFI名,改成你用的WIFI名,最好不要有中文
const String wifiPwd = ""; //obloq模块连接的WIFI密码,改成你用的WIFI密码 SoftwareSerial obloqModuleSerial(,); // 创建一个软串口,用于和obloq模块进行通信:10是其RX(接Obloq的TX) , 11是其TX(接Obloq的RX) Obloq olq(&obloqModuleSerial,wifiSSID,wifiPwd,iotId,iotPwd); //创建一个Obloq对象。 //已监听设备的消息回调函数,可以在这个函数里面对接收的消息做判断和相应处理,需要用setMsgHandle()来设置这个回调函数
void msgHandle(const String& topic,const String& message)
{
if(topic==topic1)
{
if(message == "off") //如果收到了关于topic1主题的"off"消息,则熄灭板载LED
{
digitalWrite(LED_BUILTIN,LOW);
}
else if(message == "on") //如果收到了关于topic1主题的"on"消息,则点亮板载LED
{
digitalWrite(LED_BUILTIN,HIGH);
}
}
} void setup(void)
{ obloqModuleSerial.begin(); //obloq模块的串口通信波特率是9600,所以要把软串口的波特率也设置为9600 olq.setMsgHandle(msgHandle);//注册消息回掉函数 olq.subscribe(topic1); //订阅主题 pinMode(LED_BUILTIN,OUTPUT); //配置pin 13 ,即驱动板载LED的引脚为输出模式 } void loop(void)
{
olq.update(); //轮询 }
本文参考
Obloq模块:基于ESP8266的物联网模块的更多相关文章
- Arduino 基于 ESP8266 配置WIFI模块
Arduino 基于 ESP8266 配置WIFI模块 使用ESP8266作为服务器,使用浏览器访问该服务器,从而控制LED灯 选择 [文件]->[示例]->[ESP8266WIFI]-& ...
- Asp.net Mvc4 基于Authorize实现的模块权限验证方式
在MVC中,我们可以通过在action或者controller上设置Authorize[Role="xxx"] 的方式来设置用户对action的访问权限.显然,这样并不能满足我们的 ...
- Asp.net Mvc4 基于Authorize实现的模块访问权限
在MVC中,我们可以通过在action或者controller上设置Authorize[Role="xxx"] 的方式来设置用户对action的访问权限.显然,这样并不能满足我们的 ...
- nodeJS实战:自定义模块与引入,不同模块的函数传递及回调处理,exports与module.exports(基于nodejs6.2.0)
前言:本文基于上一篇文章中的源代码进行改写,地址:http://blog.csdn.net/eguid_1/article/details/52182386 注意:为什么不用module.export ...
- Prism for WPF再探(基于Prism事件的模块间通信)
上篇博文链接 Prism for WPF初探(构建简单的模块化开发框架) 一.简单介绍: 在上一篇博文中初步搭建了Prism框架的各个模块,但那只是搭建了一个空壳,里面的内容基本是空的,在这一篇我将实 ...
- 基于nginx-rtmp-module模块实现的HTTP-FLV直播模块(nginx-http-flv-module)
本文后续的内容将在这里更新:<基于nginx-rtmp-module模块实现的HTTP-FLV直播模块(nginx-http-flv-module)续>.注意:下文的配置很多已经不能用了, ...
- 基于SpringBoot构建分模块项目
前言 步骤过于详细,多图慎入!!! 假设一个场景,要开发一个4s店维修部的办公系统,其功能有:前台接待,维修抢单,财务结算,库存管理.于是我们创建一个项目balabalabala写完交工. 一段时间后 ...
- Python网络编程基础 ❸ struct模块 基于upd的socket服务
struct模块 基于upd的socket服务
- PCL中outofcore模块---基于核外八叉树的大规模点云的显示
写在前面 最近公众号的活动让更多的人加入交流群,尝试提问更多的我问题,群主也在积极的招募更多的小伙伴与我一起分享,能够相互促进. 这里总结群友经常问,经常提的两个问题,并给出我的回答: (1) ...
随机推荐
- 基于vue+springboot+docker网站搭建【九】负载均衡
后台mall-admin 负载均衡 1.新启动一个mall-admin docker实例 docker run -p 9002:9001 --name mall-admin-9002 --link m ...
- 我脑中的JVM大全附带Java8的特性
Java虚拟机-sun classic vm 世界上第一款商用的Java虚拟机. 只能使用纯解释器的方式来执行Java代码. Java虚拟机-ExactVM Exact Memory Manageme ...
- Java中的参数验证(非Spring版)
1. Java中的参数验证(非Spring版) 1.1. 前言 为什么我总遇到这种非正常问题,我们知道很多时候我们的参数校验都是放在controller层的传入参数进行校验,我们常用的校验方式就是引入 ...
- CTF必备技能丨Linux Pwn入门教程——利用漏洞获取libc
Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...
- 电信NBIOT 3 - 数据下行
电信NBIOT 1 - 数据上行(中国电信开发者平台对接流程) 电信NBIOT 2 - 数据上行(中间件获取电信消息通知) 电信NBIOT 3 - 数据下行 电信NBIOT 4 - NB73模块上行测 ...
- flink Periodic Watermarks 自定义周期性水印
1.BoundedOutOfOrdernessGenerator /** * This generator generates watermarks assuming that elements ar ...
- C++编译错误 --- 成员函数定义在 .h 文件中出现重定义错误(Error LNK 2005)
今天写了一个简单的类,定义在 .h 文件中, 类很简单就将其成员函数定义在了一起(class类后面).运行的时候出现了如下图所示的编译错误(error LNK2005) 查资料,大部分都是说需要加上 ...
- Spring Junit 测试样例
SpringMVC 框架下的junit测试方式 package com.sixeco.user.controller; import org.apache.logging.log4j.LogManag ...
- luogu P1904 天际线
分析 都知道是从左向右扫描 可是该维护什么,扫描什么? 注意想想怎么输出, 实际上它要的输出就是图形的轮廓,即每个突出块的左上节点的x,y 所以说, 我们可以把扫描线扫进的楼房放入线段树,扫出的楼房删 ...
- c# 第8节 变量、变量名命令规则、作用域、@的作用
本节内容: 1:变量 2:变量名命令规则 3:常量 4:变量和常量的作用域 5:@的作用 1:变量是什么? 计算即中存储变量的也是三步骤: 实例: 2:变量命令规则 练习: 3.常量 实现: 4:变量 ...