(SKU: TEL0118) OBLOQ - IoT 物联网模块

来自DFRobot Product Wiki
跳转至: 导航搜索
文件:TEL0118.jpg
OBLOQ - IoT 物联网模块

目录

简介

  • OBLOQ是基于ESP8266设计的串口转WIFI解决方案的模块,作为物联网连接节点,用以接收和发送物联网信息。
  • 模块体积尺寸紧凑,即插即用,适用于各种3.3V/5.5V单片机系统。
  • 实现无线数据传输,远程控制,可用于扩展Arduino 。
  • 板载开关可方便的进行固件升级。

返回编辑要求(SKU:XXXXXXX) 产品名称


Warning yellow.png

禁止对模板随意更改!谢谢!


性能描述

  • 工作电压:3.3V/5V,功耗<240Ma
  • 内置低功率 32 位 CPU:可以兼作应用处理器
  • 支持UART接口
  • 内置 TCP/IP 协议栈
  • 支持 WPA WPA2/WPA2–PSK加密
  • 支持TTL串口到无线的应用
  • 无线标准:IEEE802.11b/g/n
  • 频率: 2.4 GHz

引脚说明

OBLOQ引脚说明
表名
标号 名称 功能描述
1 TX 串口发送端
2 RX 串口接收端
3 GND
4 VCC 电源


基础教程

OBLOQ模块具备的两个基础功能:发送和接收物联网数据,下面分别通过实验演示这两个功能!


准备工作

  • 硬件
    • 1 x Arduino UNO控制板
    • 1 x OBLOQ模块
    • 若干 杜邦线


  • 软件
    • Arduino IDE (根据能够使用的Arduino版本来选择,不要盲目追求最新版本), 点击下载Arduino IDE,下载完成后安装!
    • 点击下载库文件[下载链接]。如何安装库? 如果教程中不涉及库的使用,请删除此提醒。


  • 注册物联网账号
    • 点击注册物联网账号,注册账号并登陆,记录下账号和密码,后面程序中会用到。
    • 创建物联网设备,程序中通过创建的设备名来完成对消息的发送和接收,按下面步骤创建物联网设备(设备名):Button
      • 1.输入设备名称
      • 2.点击添加设备按钮,如果设备列表中出现设备名Button表示设备创建成功。

心率传感器连线图


此次测试: 账号:test 密码:test 设备:Button

OBLOQ发送消息

使用OBLOQ发送消息到物联网:每隔两秒钟发送一次数据到物联网


硬件连接

心率传感器连线图

样例代码

/*
 DFRobot_simpleSend

 *Function:
 Send data once every two seconds to the Internet of Things

 created 2017/3/6
 by Jason

*/
 
#include <SoftwareSerial.h>
#include "Iot.h"

Iot iot;  
 
SoftwareSerial mySerial(10, 11);         // RX, TX

#define WIFI_SSID       "DFSoftware"       //wifi名称
#define WIFI_PASSWD     "dfrobotsoftware"  //wifi密码
#define IOT_USERNAME    "test"             //物联网账号
#define IOT_PASSWD      "test"             //物联网账号密码
char *tempString   =    "string";
unsigned long sendTime = 0;
unsigned long number = 0;

void setup(void)
{
  mySerial.begin(38400);                  //波特率必须是38400
  iot.setup(mySerial, WIFI_SSID, WIFI_PASSWD, IOT_USERNAME, IOT_PASSWD);
  iot.start();
}

void loop(void)
{
  //每两秒钟发送一次字符串到物联网
  if(millis() - sendTime >= 2000){
    sendTime = millis();
    ultoa(number++,tempString,10);         //将无符号长整型数据转换成字符串
    iot.publish("key1", tempString);       //发送字符串到物联网,key1是物联网设备名
    //iot.publish("key1", "down");         //直接发送字符串
  }
  iot.loop();
}       


结果

通过网页端查看物联网接收到的消息:

  • 1.程序上传成功后,复位UNO,等待OBLOQ模块上的小灯变成绿色,表示物联网已经连接成功,能够正常通信了,
  • 2.点击登录物联网
  • 3.点击 设备名称 列表中设备Button后面的设备消息按钮,会打开Button的消息列表,
  • 4.设备Button的消息会每两秒钟更新一次,查看消息可点击刷新消息按钮。
    • 1.输入发送的消息
    • 2.点击发送消息按钮,如果消息发送成功,消息列表会显示发送的消息和时间。

心率传感器连线图


OBLOQ接收消息

通过OBLOQ接收物联网发来的消息:物联网发送消息,Arduino UNO通过OBLOQ模块接收消息并且控制板载LED小灯的亮灭,接收到消息1,打开LED小灯,接收到消息0,关闭LED小灯。


硬件连接

心率传感器连线图

样例代码

/*
  DFRobot_simpleReceive

 * LED attached from pin 13 to ground
  
 * Note: 
 on most Arduinos there is already an LED on the board attached to pin 13.

 *function:
 The IOT device receives the number 1, turns on the LED,  receives the number 0, turns off the LED

 created 2017/3/6
 by Jason

 */

#include <SoftwareSerial.h>
#include "Iot.h"

Iot iot; 

SoftwareSerial mySerial(10, 11);         // RX, TX

#define WIFI_SSID       "DFSoftware"       //wifi名称
#define WIFI_PASSWD     "dfrobotsoftware"  //wifi密码
#define IOT_USERNAME    "test"             //物联网账号
#define IOT_PASSWD      "test"             //物联网账号密码


int tempData = 0;                          //缓存接收的整型数据

void * myKey(const char *data, uint16_t len)
{ 
  tempData = atoi(data);                  //将接收的字符串转整型,浮点型,长整形...等atoi(),atof(),atol()...
  if(tempData == 1)
    digitalWrite(13,HIGH); //打开LED小灯
  if(tempData == 0)
    digitalWrite(13,LOW); //关闭LED小灯 
}

void setup(void)
{ 
  mySerial.begin(38400);                  //波特率必须是38400
  pinMode(13,OUTPUT);
  iot.setup(mySerial, WIFI_SSID, WIFI_PASSWD, IOT_USERNAME, IOT_PASSWD);
  iot.subscribe("key1", myKey);           //监听物联网端设备名为key1发送过来的消息
  iot.start();
}

void loop(void)
{
	iot.loop();
}         


结果

通过网页端发送物联网消息:

  • 1.程序上传成功后,复位UNO,等待OBLOQ模块上的小灯变成绿色,表示物联网已经连接成功,能够正常通信了,
  • 2.点击登录物联网
  • 3.点击 设备名称 列表中设备Button后面的设备消息按钮,会打开Button的消息列表,
  • 4.在网页顶部发送消息窗口中输入数字1,再点击发送消息,消息列表会刷新,同时Arduino UNO板载13号引脚控制的LED小灯被点亮,同样操作,发送数字0,LED小灯会被关闭。

心率值.png


进阶教程

在完成基础教程的两个实验后,多设备之间的消息传递就很简单了,下面通过实验建立起两个OBLOQ设备之间的通信,目标:实现远程实体按键对小灯亮灭的控制。

准备工作

  • 硬件
    • 2 x Arduino UNO控制板
    • 2 x OBLOQ模块
    • 1 x 按键模块
    • 若干 杜邦线


  • 软件
    • 参考基础教程


  • 注册物联网账号
    • 参考基础教程


模块间通信

将两块OBLOQ连接到物联网,通过物联网的设备名(key1)建立通信,一个设备发送消息到物联网,另一个设备接收消息并控制小灯亮灭。


硬件连接

发送模块(左边),接收模块(右边):


样例代码

因为需要实现两个模块之间的通信,所以需要一块UNO下载发送端代码,另一块UNO下载接收端代码!

  • 发送设备端的UNO下载下面代码:
/*
  DFRobot_advancedSend

 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground

 *function:
 The IOT device sends a message when the key is pressed
 We can convert the integer number to a string and send it out through the IOT device

 created 2017/3/6
 by Jason
 */
 
#include <SoftwareSerial.h>
#include "Iot.h"

void * eventCb(uint8_t type, const char *data, uint16_t len);
Iot iot(eventCb);                          //当物联网既需要接收数据有需要发送数据的时候,需要传入回调函数

SoftwareSerial mySerial(10, 11);         // RX, TX

#define WIFI_SSID       "DFSoftware"       //wifi名称
#define WIFI_PASSWD     "dfrobotsoftware"  //wifi密码
#define IOT_USERNAME    "test"             //物联网账号
#define IOT_PASSWD      "test"             //物联网账号密码

char *tempString =      "string";
int normalVoltage = 0;                     //按键防抖动的相关参数
bool isPress = false;
bool isClick = false;;
bool hasPress = false;
int  buttonPin = 2;
bool currentState = false;
unsigned long currentTime = 0;
bool sendFlag  = true;

//连接状态回调函数
void * eventCb(uint8_t eventType, const char *data, uint16_t len)
{
}

void setup(void)
{
  mySerial.begin(38400);                   //打开软串口,波特率必须是38400
  pinMode(buttonPin,INPUT);
  iot.setup(mySerial, WIFI_SSID, WIFI_PASSWD, IOT_USERNAME, IOT_PASSWD);
  iot.start();
}
 
void loop(void)
{
  keyScan();
  if(isClick)
  {
    if(sendFlag){
      itoa(1,tempString,10);                //将整型转换成字符串,然后再发送
      iot.publish("key1", tempString);
      sendFlag = false;
    }
    else{
      iot.publish("key1", "0");             //直接发送字符串0也可以
      sendFlag = true;
    }    
  }
 iot.loop();
}

//按键扫描
void keyScan()
{
   if((digitalRead(buttonPin)!=normalVoltage)&&!isPress)
    {
        isPress = true;
        currentTime = millis();
    }
    else if (isPress)
    {
        if (millis()-currentTime>=10)
        {
            if(digitalRead(buttonPin)!=normalVoltage)
            {
                currentState = true;
            }
            else
            {
                currentState = false;
                isPress = false;
            }
        }
    }
    isClick = false;
    if (currentState) {
        hasPress = true;
    }
    else if(hasPress) {
        isClick = true;
        hasPress = false;
    }
}


  • 接收设备端的UNO下载下面代码:
/*
  DFRobot_advancedReceive

 * LED attached from pin 13 to ground
  
 * Note: 
 on most Arduinos there is already an LED on the board attached to pin 13.

 *function:
 The IOT device receives the number 1, turns on the LED, otherwise turns off the LED

 created 2017/3/6
 by Jason

 */

#include <SoftwareSerial.h>
#include "Iot.h"

void * eventCb(uint8_t type, const char *data, uint16_t len);
Iot iot(eventCb);                          //当物联网既需要接收数据有需要发送数据的时候,需要传入回调函数

int tempData = 0;                          //缓存接收的整型数据

SoftwareSerial mySerial(10, 11);         // RX, TX

#define WIFI_SSID       "DFSoftware"       //wifi名称
#define WIFI_PASSWD     "dfrobotsoftware"  //wifi密码
#define IOT_USERNAME    "test"             //物联网账号
#define IOT_PASSWD      "test"             //物联网账号密码

//连接状态回调函数
void * eventCb(uint8_t eventType, const char *data, uint16_t len)
{
}

void * myKey(const char *data, uint16_t len)
{
  tempData = atoi(data);                   //字符串转整型,浮点型,长整形...等atoi(),atof(),atol()...
  if(tempData == 1)
    digitalWrite(13,HIGH);                 //打开LED小灯
  if(tempData == 0)
    digitalWrite(13,LOW);                  //关闭LED小灯 
}

void setup(void)
{ 
  mySerial.begin(38400);
  pinMode(13,OUTPUT);
  iot.setup(mySerial, WIFI_SSID, WIFI_PASSWD, IOT_USERNAME, IOT_PASSWD);
  iot.subscribe("key1", myKey);
  iot.start();
}

void loop(void)
{
	iot.loop();
}                            


结果

发送端和接收端分别下载好相应的程序后,按下连接在发送端的按键,接收端会点亮或熄灭板载连接在13号数字引脚的LED小灯。


高级教程

高级教程主要是演示库文件中高级函数功能的使用,包括打印调试信息...

回调函数的应用

  • 通过连接时候的回调函数,利用串口查看连接过程中的各个状态信息


样例代码


/*
 DFRobot_callback

 *function:
 Through the callback function to check the Internet of things connected to the various states, 
 used to debug and modify the program

  //EVENT_CODE_WIFI               //0:ssid或密码错误,1:已连接,2:已断开
  //EVENT_CODE_SERVER             // 0:用户名或密码错误,1:已连接,2:已断开
  //EVENT_CODE_NEW_VERSION        // x:最新版本字符串信息
  //EVENT_CODE_UPGRADE_PERCENT    // 0~100 更新进度
  //EVENT_CODE_UART               // 0:异常,1:正常
  //EVENT_CODE_UNKNOWN            // 0:未定义错误

 created 2017/3/6
 by Jason
 */

#include <SoftwareSerial.h>
#include "Iot.h"

#define IOTDBG(...) if(1){Serial.print("["); Serial.print(__FUNCTION__); Serial.print("(): "); Serial.print(__LINE__); Serial.print(" ] "); Serial.println(__VA_ARGS__);}
void * eventCb(uint8_t type, const char *data, uint16_t len);
Iot iot(eventCb);

SoftwareSerial mySerial(10, 11);         // RX, TX

#define WIFI_SSID       "DFSoftware"       //wifi名称
#define WIFI_PASSWD     "dfrobotsoftware"  //wifi密码
#define IOT_USERNAME    "test"             //物联网账号
#define IOT_PASSWD      "test"             //物联网账号密码

unsigned long long sendTime = 0;
bool sendFlag = true;

void * eventCb(uint8_t eventType, const char *data, uint16_t len)
{
 
  IOTDBG(eventType,HEX);
  IOTDBG(data[0],HEX);
  switch(eventType){
    case EVENT_CODE_WIFI:
      if(data[0] == 0){
        IOTDBG("EVENT_CODE_WIFI: ssid or passwd error");
      }else if(data[0] == 1){
        IOTDBG("EVENT_CODE_WIFI: wifi connect");
      }else if(data[0] == 2){
        IOTDBG("EVENT_CODE_WIFI: wifi disconnect");
      }else{
        IOTDBG("EVENT_CODE_WIFI: wifi error arg");
      }
      break;
    case EVENT_CODE_SERVER:
      if(data[0] == 1){
        IOTDBG("EVENT_CODE_SERVER: server connect");
      }else if(data[0] == 2){
        IOTDBG("EVENT_CODE_SERVER: server disconnect");
      }else if(data[0] == 0){
        IOTDBG("EVENT_CODE_SERVER: username or passwd error");
      }else{
        IOTDBG("EVENT_CODE_SERVER: server error arg");
      }
      break;
    case EVENT_CODE_NEW_VERSION:
      IOTDBG("eventType: has new Version");
      IOTDBG(data);
      //iot.update();//默认升级到当前平台最新版//iot.update(PLATFORM_CURRENT,"0");
      break;
    case EVENT_CODE_UPGRADE_PERCENT:
      //uint8_t percent = (uint8_t)data[0];
      IOTDBG("eventType: upgrade percent:");
      IOTDBG((uint8_t)data[0]);
    case EVENT_CODE_UART:
      break;
    case EVENT_CODE_UNKNOWN:
      break;
    default:
      break;
  }
}

void * myCb1(const char *data, uint16_t len)
{
  Serial.print("my Relay1 Recv:");
  Serial.println(data);
  Serial.print("len=");
  Serial.println(len);
  return NULL;
}

void setup(void)
{
  Serial.begin(115200);
  mySerial.begin(38400);
  while(!Serial);
  iot.setDbgSerial(Serial);
  iot.setup(mySerial, WIFI_SSID, WIFI_PASSWD, IOT_USERNAME, IOT_PASSWD);
  iot.subscribe("Relay1", myCb1);          
  iot.start();
}

void loop(void)
{
  //两秒钟发送一次字符串,循环发送"down","up"
	if(millis() - sendTime > 2000){
		sendTime = millis();
		if(sendFlag){
      sendFlag = false;
			iot.publish("key1", "down");
		}else{
      sendFlag = true;
			iot.publish("key1", "up");
		}
	}
	iot.loop();
}
   


结果

心率值.png

常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!


更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。


更多


DFshopping car1.png [Link DFRobot商城购买链接]

个人工具
名字空间

变换
操作
导航
工具箱