Thiết bị ngoài trời

Kết nối thiết bị outdoor lên nền tảng, nội dung này được thực hiện trên ESP32 làm MCU điều khiển Devkit SIM7020 giao tiếp với Innoway qua NB-IoT

Kết nối ESP32 với SIM7020

  • Nối chân TX1 của SIM7020 với chân RX0 của ESP32 (pin 34)

  • Nối chân RX1 của SIM7020 với chân TX2 của ESP32 (pin 28)

  • Cấp nguồn cho SIM7020 và chuyển công tắc switch lên vị trí ON và nhấn PWRKEY để đèn LED1, LED2 sáng.

Gửi dữ liệu lên Innoway

Ví dụ đọc giá trị chân analog GPIO34 của ESP32 và gửi lên server với tần suất 30s một lần.

/*
 * @FileName: InnoPublish.ino
 * @Author: Hao Van
 * @Email: haohv6@gmail.com 
 * @LastEditors: Hao Van
 * @Date: 2021-12-02 11:24:27
 * @LastEditTime: 2021-12-02 11:24:27
 * @Copyright: VIETTEL HIGH TECHNOLOGY INDUSTRIES CORPORATION
 * @Company: http://viettelrd.com.vn/en
 * 
 * 
 * 
 * @Description: This demo is based on the Esp32, 
 * It comunicate with Kit 7020. Every 15s, it connect and publish data to InnoWay, then disconnect.
*/


#include <Arduino.h>
#include "InnoWay.h"

#define DEVICE_ID "8d17bc70-8677-4c32-82a4-db77293a94ae"
#define TOKEN "pXQYlQe0jiwnurj36VE0lCQnU4nsBZ5a"

unsigned long previousMillis = 0;
uint8_t analogPin = 34; // Pin used to read data from GPIO34 ADC_CH6.

char buffer_uart0[256];
char data_sub[256];

void setup() {
    Serial.begin(115200);
    Serial2.begin(115200);
    Serial.print("\r\n\r\n-----------InnoWay Publish sample start-------------\r\n\r\n");
}

void loop() {
    Inno_polling(buffer_uart0, data_sub);     //UART0 
    unsigned long currentMillis = millis();

    if (currentMillis - previousMillis >= 15000) {
        previousMillis = currentMillis;
        Serial.println("----------------------");
        float value = analogRead(analogPin);

        char pub_data[216], pub_topic[100];
        sprintf(pub_topic,"messages/%s/events",DEVICE_ID);
        
        sprintf(pub_data,"{\"Value\":%d}",value);
        Serial.print("Data to send:");
        Serial.println(pub_data);

        int err = Inno_connect(DEVICE_ID, TOKEN, 15, 1);
        if ( err != IN_OK) {
            Serial.print("\r\nConnect InnoWay err");
            goto exit;
        }
        Serial.print("\r\nConnect OK");
        err = Inno_publish(pub_topic, pub_data, 1, 0);
        if (err != IN_OK) {
            Serial.print("\r\nPublish err");
        }
        Serial.print("\r\n Publish data OK");
        err = Inno_disconnect();
        if (err != IN_OK) {
            Serial.print("\r\nPublish err");
            goto exit;
        }
        Serial.print("\r\nDisconnect OK");
    }
    exit:
    delay(TIMER_DELAY);
}

Nhận dữ liệu từ Innoway

  • Ví dụ nhận bản tin từ server

/*
 * @FileName: InnoSubcribe.ino
 * @Author: Hao Van
 * @Email: haohv6@gmail.com 
 * @LastEditors: Hao Van
 * @Date: 2021-12-02 11:24:27
 * @LastEditTime: 2021-12-02 11:24:27
 * @Copyright: VIETTEL HIGH TECHNOLOGY INDUSTRIES CORPORATION
 * @Company: http://viettelrd.com.vn/en
 * 
 * 
 * @Description: This demo is based on the Esp32, 
 * It comunicate with Kit 7020. When turn on, it subcribe in topic "messages/{Device_id}/events"
 * If has data send to that topic, device return it to (char*)data_sub
*/
#include <Arduino.h>
#include "InnoWay.h"
#define DEVICE_ID "8d17bc70-8677-4c32-82a4-db77293a94ae"
#define TOKEN "pXQYlQe0jiwnurj36VE0lCQnU4nsBZ5a"
unsigned long previousMillis = 0;
char buffer_uart0[256];
char data_sub[256];
void setup() {
    Serial.begin(115200);
    Serial2.begin(115200);
    Serial.print("\r\n\r\n-----------InnoWay Subcribe sample start-------------\r\n\r\n");
    delay(3000);
}
void loop() {
    Serial.println("----------------------");
    int err = Inno_connect(DEVICE_ID, TOKEN, 15, 1);
    if ( err != IN_OK) {
        Serial.print("\r\nConnect InnoWay err");
        goto exit;
    }
    char topic[100];
    sprintf(topic,"messages/%s/events",DEVICE_ID);
    err = Inno_subscribe(topic, 1);
    if ( err != IN_OK) {
        Serial.print("\r\Sub InnoWay err");
        goto exit;
    }
    Serial.print("\r\nSubcribe OK");
    while(1) {
        int err = Inno_polling(buffer_uart0, data_sub);
        if (err == IN_SUB_DATA) {
            Serial.print("\r\nData subcribe: ");
            Serial.print(data_sub);
        }
        delay(TIMER_ATC_PERIOD);
    }
    exit:
    delay(TIMER_ATC_PERIOD);
}

Last updated