3. 烧录控制程序

优质
小牛编辑
164浏览
2023-12-01

完成硬件搭建后,为了能让这些模块和板子运作起来,需要向主控板烧录程序。

注意:根据自己的环境信息修改样例代码中的wifi信息和测试IoT网站账号。

//meanings: wifi ssid(DFRobot-guest), wifi password(dfrobot@2017), iot_id(Skv3zKyNb), iot_password(r1lD3ztJ4b)
Obloq olq(&softSerial,"DFRobot-guest","dfrobot@2017","Skv3zKyNb","r1lD3ztJ4b"); 

//Iot deviceTopic:BJpHJt1VW
const String devTopic = "BJpHJt1VW";

具体代码 (由于版本更新,如果不能使用,建议查看最新样例代码库)

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

SoftwareSerial softSerial(10,11);
//生成OBLOQ对象,参数:串口指针,wifiSsid, WifiPwd, iotId, iotPwd
//Generate OBLOQ object, parameters: serial pointer, wifiSsid, WifiPwd, iotId, iotPwd
Obloq olq(&softSerial,"DFRobot-guest","dfrobot@2017","Skv3zKyNb","r1lD3ztJ4b");
const String devTopic = "BJpHJt1VW";
 //led小灯引脚 led pin
int ledPin = 13;

//已监听设备的消息回调函数,可以在这个函数里面对接收的消息做判断和相应处理,需要用setMsgHandle()来设置这个回调函数
//message callback function of the subscribed device. This function handle the message received. setMsgHandle() will change settings of this function.
void msgHandle(const String& topic,const String& message)
{
    if(devTopic == topic)
    {
        if(message == "1")
          digitalWrite(ledPin,LOW);
        else if(message == "2")
          digitalWrite(ledPin,HIGH);
    }
}

void setup()
{
    pinMode(ledPin,OUTPUT);
    softSerial.begin(9600);
    olq.setMsgHandle(msgHandle);//注册消息回调函数 register message callback function
    olq.subscribe(devTopic); //监听设备 Subscribe topic
}
void loop()
{
    olq.update();
}

烧录完成后,先按下OBLOQ上的reset键重启OBLOQ,再按下主控板上的“Reset”按键重启主控板,然后等待OBLOQ模块连接MQTT即可。

(附1)发布消息样例代码

上面的样例代码,主要讲了这样一个过程:DF-IoT网站可以向Obloq发送数据,当Obloq监听到数据后,将数据传给Arduino控制小灯亮灭。那反过来,Obloq能不能向DF-IoT网站发送数据呢?当然可以。下面就是Obloq每隔10s发送一条消息的样例代码。

具体代码 (由于版本更新,如果不能使用,建议查看最新样例代码库)

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

SoftwareSerial softSerial(10,11);
//生成OBLOQ对象,参数:串口指针,wifiSsid,WifiPwd,iotId,iotPwd
//Generate OBLOQ object, parameters: serial pointer, wifiSsid, WifiPwd, iotId, iotPwd
Obloq olq(&softSerial,"DFRobot-guest","dfrobot@2017","Skv3zKyNb","r1lD3ztJ4b");
static unsigned long currentTime = 0; 
unsigned long messageCount = 1;

void setup()
{
    softSerial.begin(9600);
}

void loop()
{
    olq.update();
    if(millis() - currentTime > 10000)
    {
        currentTime =  millis();
        //向设备发送消息,设备Topic:BJpHJt1VW,消息内容:从1开始累加的计数
        //Publish message to device (Topic:BJpHJt1VW), message contents: accumulated numbers counting from 1.
        olq.publish("BJpHJt1VW", String(messageCount++)); 
    }
}

(附2)基于HTTP协议样例代码

之前的样例代码,Obloq使用的都是MQTT协议连接物联网。其实Obloq也可以使用HTTP协议上网。下面展示的分别是基于HTTP协议的GET方法和POST方法。

与基于MQTT协议的访问不同,HTTP协议不需要使用iot_id, iot_pwd这两个参数,例如:Obloq olq(&softSerial,"DFRobot-guest","dfrobot@2017");。

访问成功后,样例代码中的 httpMsgHandle 函数可以串口打印出服务器返回的code(系统消息)和message(具体消息)。

注意:如果Obloq使用HTTP POST发送数据,发送的数据必须是Json字符串,接收数据的服务器也必须可以接受Json类型的数据。

具体代码HTTP GET (由于版本更新,如果不能使用,建议查看最新样例代码库)

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

SoftwareSerial softSerial(10,11);

//生成OBLOQ对象,参数:串口指针,wifiSsid,WifiPwd
//Generate OBLOQ object, parameters: serial pointer, wifiSsid, WifiPwd
Obloq olq(&softSerial,"DFRobot-guest","dfrobot@2017");
static unsigned long currentTime = 0; 

void httpMsgHandle(const String& code,const String& message)
{
    Serial.println("Code: " + code);
    Serial.println("Message: " + message);
}

void setup()
{
    softSerial.begin(9600);
    Serial.begin(115200);
    olq.setHttpMsgHandle(httpMsgHandle);
}
int number = 1;
void loop()
{
    olq.update();
    if(millis() - currentTime > 2000)
    {
        currentTime =  millis();
        olq.get("http://iot_s1.dfrobot.com.cn:3001/apiv2/publish?topic=aaa&iot_name=bbb&iot_pwd=ccc&message="+String(number));
        number++;
    }
}

具体代码HTTP POST (由于版本更新,如果不能使用,建议查看最新样例代码库)

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

SoftwareSerial softSerial(10,11);

//生成OBLOQ对象,参数:串口指针,wifiSsid,WifiPwd
//Generate OBLOQ object, parameters: serial pointer, wifiSsid, WifiPwd
Obloq olq(&softSerial,"DFRobot-guest","dfrobot@2017");
static unsigned long currentTime = 0; 

void httpMsgHandle(const String& code,const String& message)
{
    Serial.println("Code: " + code);
    Serial.println("Message: " + message);
}

void setup()
{
    softSerial.begin(9600);
    Serial.begin(115200);
    olq.setHttpMsgHandle(httpMsgHandle);
}
void loop()
{
    olq.update();
    if(millis() - currentTime > 2000)
    {
        currentTime =  millis();
        // post传递的数据是JSON格式
        // post data is in JSON format
        olq.post("http://192.168.7.123/test","{\"abc\":12222}");
    }
}