利用APPInventor开发手机APP,实现OBLOQ-IOT与Arduino设备通信

国外网站链接:https://community.thunkable.com/t/paid-mqtt-tcp-ip-extension-update-9-10-2017/7168

通过Dfrobot的OBLOQ物联网设备的Easy Iot有微信小程序,控制物联网设备时需要填写数据来发送指令,不方便。写出自己的手机APP,通过云端远程控制物联网设备。通过APPInventor并利用MQTT扩展(下载: https://download.csdn.net/download/acktomas/11805584),可以实现物联网数据的交互。

1. 软硬件准备

  • 编程环境:App Inventor,Arduino,MQTT扩展:https://download.csdn.net/download/acktomas/11805584
  • 硬件环境:arduino UNO,Gravity-OBLOQ物联网模块,手机
  • 云端:Easy Iot:http://iot.dfrobot.com.cn/

2. App

2.1 组件设计

利用APPInventor开发手机APP,实现OBLOQ-IOT与Arduino设备通信_第1张图片

2.2 逻辑设计

利用APPInventor开发手机APP,实现OBLOQ-IOT与Arduino设备通信_第2张图片

说明:ipAdress是Easy Iot的网站地址,port中1883是MQTT协议默认端口号(HTTP协议默认端口号是3001,不要混淆)。userName和password是Easy Iot注册账号时生成的Iot_id和Iot_pwd。idDevice随便填写,但一定要是数字,不能是字符串。topic是在EasyIot添加的网络设备,EasyIot会自动生成ID。
利用APPInventor开发手机APP,实现OBLOQ-IOT与Arduino设备通信_第3张图片利用APPInventor开发手机APP,实现OBLOQ-IOT与Arduino设备通信_第4张图片

3. Arduino

3.1 设备连接

arduino obloq
10(rx) tx
11(tx) rx

3.2 Arduino代码

3.2.1 obloq库:https://github.com/DFRobot/Obloq

  1. 关于obloq库的介绍:https://blog.csdn.net/acktomas/article/details/100070623#_1054
  2. 库中示例:https://blog.csdn.net/acktomas/article/details/100070623#62__1142

3.2.2 代码

#include "SoftwareSerial.h"
#include "Obloq.h"

SoftwareSerial softSerial(10, 11);
#define WIFIID "FAST_lib3000"
#define WIFIPWD "******"
#define IOTID "*****"
#define IOTPWD "*****"
#define IOTTopic "******"

Obloq oloq(&softSerial, WIFIID, WIFIPWD, IOTID, IOTPWD);

void msgHandle(const String &topic, const String &msg);

int number = 1;
long int prevTime = 0;
//long int currentTime=0;

void setup() {
  pinMode(13, OUTPUT); //设置引脚;;
  Serial.begin(115200);
  softSerial.begin(9600);
  oloq.setMsgHandle(msgHandle);
  oloq.subscribe(IOTTopic);
  randomSeed(analogRead(0));
}

void loop() {
  String pubStr = "{\"temp\":";
  oloq.update();
  if (millis() - prevTime > 5000) {
    pubStr += (number++);
    pubStr += ",\"hum\":";
    pubStr += (number++);
    pubStr += "}";
    oloq.publish(IOTTopic, pubStr);
    prevTime = millis();
  }
}
void msgHandle(const String &topic, const String &msg)
{
  if (topic == IOTTopic) {
    if (msg == "1") {
      digitalWrite(13, 1);
    }
    if (msg == "0") {
      digitalWrite(13, 0);
    }
  }
}

说明:

  1. 在程序中尽量不要用delay()函数,这样会影响物联网的检测,
  2. 程序发送JSON格式数据,方便App中获取数据并解析。

你可能感兴趣的:(Arduino,项目,APPInventor)