zoukankan      html  css  js  c++  java
  • 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| "

    连接一个指定的WIFI,例如:

    "|2|1|myWIFI,123456| "

    将命令Obloq模块连接名称为myWIFI,密码为123456的WIFI

    "|2|2| "

    命令Obloq模块断开当前连接的WIFI

    "|4|1|1|host|port|iotid|iotpwd| "

    连接到一个MQTT Broker。

    host是服务器的主机名或者IP地址;

    port是MQTT Broker的端口;

    iotid是建立MQTT连接使用的用户名;

    iotpwd是建立MQTT连接使用的密码;

    为了形成对比,再来看一下安信可ESP8266官方使用的AT命令 

    AT命令命令作用
    "AT+CWJAP=<wifi_ssid>,<wifi_pwd> "

    连接一个指定的WIFI,例如:

    "AT+CWJAP="myWIFI","123456" "

    将命令ESP8266模块连接名称为myWIFI,密码为123456的WIFI。

    注意双引号里面嵌套的双引号要用转意字符。

    "AT+CWQAP "

    断开与当前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 = "123456";               //obloq模块连接的WIFI密码,改成你用的WIFI密码
    
    SoftwareSerial obloqModuleSerial(10,11);       // 创建一个软串口,用于和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(9600);   //obloq模块的串口通信波特率是9600,所以要把软串口的波特率也设置为9600
        
        olq.setMsgHandle(msgHandle);//注册消息回掉函数
        
        olq.subscribe(topic1);    //订阅主题
    
        pinMode(LED_BUILTIN,OUTPUT);  //配置pin 13 ,即驱动板载LED的引脚为输出模式
    
    }
    
    void loop(void)
    {
      olq.update();  //轮询
      
    }

     本文参考

    OBLOQ模块文档

    OBLOQ模块使用教程

  • 相关阅读:
    hdu 5253 最小生成树
    hdu5248 序列变换
    bjfu1299 stl使用
    bjfu1277 简单递归
    bjfu1262 优先队列
    bjfu1287字符串输出的大水题
    bjfu1281
    bjfu1253 最大上升子序列和
    [转][Unity3D]引擎崩溃、异常、警告、BUG与提示总结及解决方法
    Unity3d 中 将远程 MySQL 数据库转换为本地 Sqlite
  • 原文地址:https://www.cnblogs.com/lulipro/p/10901781.html
Copyright © 2011-2022 走看看