| 感谢主办方慷慨,这次申请到了Gravity:WIFI IoT模块进行测评,现在请您随着这篇文章一起来鸟瞰下这个模块的全景吧。 
 一、开箱:
 
 
  ,  ,  
 我们可以看到,秉承DF一贯的风格,模块封装比较好,有个明显的地方是有:UART/I2C字样的切换开关,也就是说,这样模块是支持两种连接方式的,
 不过我看介绍里,还有一款只支持 UART连接的,价格是便宜的。不过要买肯定买豪华版
  
 二、上手:
 当我们拿到一个新的DF模块的时候,你首先会干什么?(当然是看看怎么用!)
 
 这里稍微吐槽下: 我看包装上有二维码,以为是直达产品资料库的链接,不过很可惜它指向的是DF的国际版网址。
 
 如果我们想查看使用文档,一般有两种方式:
 1. 在DF商城搜这个产品名称: 可以是 TEL0126(包装外壳有带),或者 iot物联网模块,就可以找到模块。
 
  , 点产品文档或者下拉到底,直达说明文档链接。
 2. 直接在产品维库里搜TEL0126等也能找到访问链接:
 
  , https://wiki.dfrobot.com.cn/WiFi_IoT_Module_TEL0126 , 这里有这个模块非常详细的说明。
 本文我们采用 Arduino来进行测试,为什么是Arduino有几个原因,一是它比较通用,有代码有真相,第二点主要是
 当初使用Arduino的时候没有WIFI功能是一大遗憾,这里就用这个模块弥补遗憾。
 
 按照模块说明文档里的信息,安装好相关库文件后,我们可以直接打开Arduino,进行连接使用,然后来到这里:
 
  , 
 这里提供了几种不同物联的连接方法,不过Easy_IoT平台是我比较喜欢的一个平台,(这里赞一下)。
 我们使用,这个平台进行连接。代码的配置信息很明显,按照参数要求填写几个这里不赘述。
 
  , 
 不过有个问题要说明下:代码默认是 UART 连接的,如果使用I2C连接,需要把UART的代码注释,并开启I2C的代码,
 如上图我的配置。完整代码如下:
 
 
 复制代码#include "DFRobot_WiFi_IoT_Module.h"
#include <SoftwareSerial.h>
//I2C mode
DFRobot_WiFi_IoT_Module_I2C IOT;
//UART mode
//Use software serial port RX:10,TX:11
//SoftwareSerial    mySerial(10, 11);
//DFRobot_WiFi_IoT_Module_UART IOT(&mySerial);
//Configure WiFi name and password
const char *WIFI_SSID                = "";
const char *WIFI_PASSWORD            = "";
//Easy IOT EN configuration
const char *EASY_IOT_SERVER          = "iot.dfrobot.com.cn";
//Easy IOT EN configuration
//const char *EASY_IOT_SERVER        = "iot.dfrobot.com";
const char *EASY_IOT_PORT            = "1883";
const char *EASY_IOT_ID              = "";
const char *EASY_IOT_PWD             = "";
const char *SUBSCRIBE_TOPIC          = "";
const char *PUBLISH_TOPIC            = "";
const char *EASY_IOT_SEND_MESSAGE    = "Send_Message";
//Set callback function
void callback(const char*topic,const char*message){
  Serial.println("Receive [ " + (String)topic + "]," + "Message : " + (String)message);
}
void setup(void){
  //Use serial as print serial port
  Serial.begin(115200);
  //Use softwareserial myserial as communication serial port
  // mySerial.begin(9600);
  //Init communication port
  while(IOT.begin() != 0){  
    Serial.println("init ERROR!!!!");
    delay(100);
  }
  Serial.println("init Success");
  //Connect WiFi
  while(IOT.connectWifi(WIFI_SSID, WIFI_PASSWORD) != 0){  
    Serial.print(".");
    delay(100);
  }
  Serial.println("Wifi Connect Success");
  //Initialize MQTT and connect to platform
  while(IOT.MQTTBegin(EASY_IOT_SERVER, EASY_IOT_PORT, EASY_IOT_ID, EASY_IOT_PWD) != 0){
    Serial.print(".");
    delay(100);
  }
  Serial.println("MQTT Connect Success");
  //Set callback function
  IOT.setCallBack(callback);
  //Subscribe to topics
  while(IOT.subscribe(SUBSCRIBE_TOPIC) != 0){
    Serial.print(".");
    delay(100);
  }
  Serial.println("Subscribe Topic Success");
}
void loop(void){
  
  // Send data to the subscribed topic.
  if(IOT.publish(PUBLISH_TOPIC,EASY_IOT_SEND_MESSAGE) == 0){
      IOT.loop();
  }else{
    Serial.println("Data sending timeout");
  }
  delay(2000);
}
 刷入程序后,打开串口,看到如下字样就表示程序成功,如果有其它问题,请参考输出对照代码解决。
 
 
  
 模块的灯,也会有相应的变化,
 
 
    
 不过中间,应该还有一种 粉红的灯,没有截图,就此略过。。。
 
 第二吐槽:模块灯太亮,钛金眼受不了。。。,希望可以加个调整亮度的API。。。。
 
 三、物联实现:
 
 为了实现物联,我们这里使用 高精度、响应快、有防尘功能 的Gravity SHT31-F数字温湿度传感器 ,
 进行室内温度读取。将 SHT31模块添加到Arduino扩展板的I2C接口上:
 
  
 刷入以下代码:并观察串口监视器:
 
 复制代码#include "DFRobot_WiFi_IoT_Module.h"
#include <DFRobot_SHT3x.h>
#include <SoftwareSerial.h>
DFRobot_SHT3x   sht3x;
//I2C mode
DFRobot_WiFi_IoT_Module_I2C IOT;
//UART mode
//Use software serial port RX:10,TX:11
//SoftwareSerial    mySerial(10, 11);
//DFRobot_WiFi_IoT_Module_UART IOT(&mySerial);
//Configure WiFi name and password
const char *WIFI_SSID                = "";
const char *WIFI_PASSWORD            = "";
//Easy IOT EN configuration
const char *EASY_IOT_SERVER          = "iot.dfrobot.com.cn";
//Easy IOT EN configuration
//const char *EASY_IOT_SERVER        = "iot.dfrobot.com";
const char *EASY_IOT_PORT            = "1883";
const char *EASY_IOT_ID              = "";
const char *EASY_IOT_PWD             = "";
const char *SUBSCRIBE_TOPIC          = "";
const char *PUBLISH_TOPIC            = "";
const char *EASY_IOT_SEND_MESSAGE    = "Send_Message";
//Set callback function
void callback(const char*topic,const char*message){
  Serial.println("Receive [ " + (String)topic + "]," + "Message : " + (String)message);
}
void setup(void){
  //Use serial as print serial port
  Serial.begin(115200);
 // set sht3x 
  while (sht3x.begin() != 0) {
    Serial.println("Failed to Initialize the chip, please confirm the wire connection");
    delay(1000);
  }
  Serial.print("Chip serial number:");
  Serial.println(sht3x.readSerialNumber());
  
   if(!sht3x.softReset()){
  
     Serial.println("Failed to Initialize the chip....");
  
   }
  Serial.println("------------------Read adta in single measurement mode-----------------------");
  
  //Use softwareserial myserial as communication serial port
  // mySerial.begin(9600);
  //Init communication port
  while(IOT.begin() != 0){  
    Serial.println("init ERROR!!!!");
    delay(100);
  }
  Serial.println("init Success");
  //Connect WiFi
  while(IOT.connectWifi(WIFI_SSID, WIFI_PASSWORD) != 0){  
    Serial.print(".");
    delay(100);
  }
  Serial.println("Wifi Connect Success");
  //Initialize MQTT and connect to platform
  while(IOT.MQTTBegin(EASY_IOT_SERVER, EASY_IOT_PORT, EASY_IOT_ID, EASY_IOT_PWD) != 0){
    Serial.print(".");
    delay(100);
  }
  Serial.println("MQTT Connect Success");
  //Set callback function
  IOT.setCallBack(callback);
  //Subscribe to topics
  while(IOT.subscribe(SUBSCRIBE_TOPIC) != 0){
    Serial.print(".");
    delay(100);
  }
  Serial.println("Subscribe Topic Success");
}
//void setup(void){
//  Serial.begin(115200);
//while (sht3x.begin() != 0) {
//
//  Serial.println("Failed to Initialize the chip, please confirm the wire connection");
//
//  delay(1000);
//
//}
//Serial.print("Chip serial number");
//
//Serial.println(sht3x.readSerialNumber());
//
// if(!sht3x.softReset()){
//
//   Serial.println("Failed to Initialize the chip....");
//
// }
//Serial.println("------------------Read adta in single measurement mode-----------------------");
//
//
//}
void loop(void){
  //IOT.loop();
  
  //Send data to the subscribed topic.
//  if(IOT.publish(PUBLISH_TOPIC,EASY_IOT_SEND_MESSAGE) == 0){
//      IOT.loop();
//  }else{
//    Serial.println("Data sending timeout");
//  }
  char Temp[10];
  dtostrf(sht3x.getTemperatureC(),1,2,Temp);
  
  Serial.print("Ambient Temperature(°C/F):");
  Serial.print(Temp);
  Serial.print(" C/");
  Serial.print("Relative Humidity(%RH):");
  Serial.print(sht3x.getHumidityRH());
  Serial.println(" %RH");
  //if(IOT.publish(PUBLISH_TOPIC,EASY_IOT_SEND_MESSAGE) == 0){
  if(IOT.publish(PUBLISH_TOPIC,Temp) == 0){
    
      IOT.loop();
  }
  delay(2000);
}
 
  
 为了展示温度变化,我们可以用手指,轻触传感器,让温度升高,再放掉让温度降低。
 
 
  , 
 基本的物联功能,已经实现了。你学废了吗?
 
 下一文,准备用这个WIFI模块实现不一样的功能,尽情期待。
 
 |