OneOS is based on end cloud integration capability | technical details of "planting environment monitor"

In the cold winter

Hot pot with pea tips

It's beautiful to think about it

Then act quickly

Let's learn how to use OneOS's end cloud integration capability to grow more lush pea tips~

Preparation tools:

Wanlian Chuangshi development board * 1

Soil moisture sensor * 1

  OneOS embedded operating system

OneNET Studio Internet of things development platform

 

Temperature and humidity monitoring applications require intelligent devices to be interconnected with the cloud platform for control, management and data analysis. Based on the OneOS kernel, OneOS integrates various end cloud communication protocols, shields complex communication processes, and supports the connection of China Mobile's OneNET Internet of things digital perception platform and other IoT platforms. Developers can quickly create end cloud integrated Internet of things applications through the connection capabilities provided by OneOS and the open capabilities and products of OneNET.

By using the standard MQTT protocol to access OneNET platform as an example, this paper shows that OneOS can quickly go to the cloud and help the rapid development of Internet of things products.

 

Introduction to OneNET Studio

OneNET Studio is a one-stop Internet of things development platform, which connects devices downward and carries applications upward. Integrate the upstream and downstream of the industrial chain, integrate the access and management of terminal equipment downward, extend the one-stop application development of the Internet of things upward, horizontally aggregate the value-added capability, provide intelligent data analysis, form an end-to-end complete link Internet of things solution system, and create an ecological environment of the Internet of things.

OneNET Studio quick start

OneNET Studio quick start mainly includes the following steps:

• registered account number

• sign in to OneNET

• access to the console

• access to Studio platform

Detailed instructions can be accessed   Onenet studio quick start [1]   Learn.

Connect to OneNET Studio

MQTT protocol

The Internet of things platform supports standard MQTT protocol and CoAP protocol access, and is an important part of the Internet of things. MQTT is a lightweight publish and subscribe transmission protocol based on TCP. It is suitable for scenarios with limited network bandwidth. At the same time, it can maintain long connections and has certain effectiveness.

Create product

A product in OneNET Studio is a set of devices with the same function definition. After quickly creating a product, you can define a product model and add corresponding devices. After entering the Studio platform, expand "device access and management" in the menu bar, click "product management" to enter the product list page. Click "add product", fill in the basic information of the product according to the prompts in the pop-up page, select MQTT for the access protocol, and complete the product creation.

Detailed instructions can be accessed   Create product [2]   Learn.

Create device

To connect a physical device to the platform, you need to first create a device on the platform (support single or batch import creation), and obtain the authentication information connected to the platform. After entering the Studio platform, expand "device access and management" in the menu bar, click "device management" to enter the device list page. Click "add device", select a single device (default method), enter the device details, and click "OK" to create the device.

Generate access Token

Authentication parameters are required to connect to the platform. The parameters required are as follows:

• ProductId: Product ID, unique ID generated by the platform

• DeviceName: device name

• token: authentication token

The Token calculation method can be accessed   Equipment safety certification [3]   Learn.

Connection platform

Use the MQTT client to try to connect to the platform and verify that the Token is calculated correctly.

The Client ID is the device name created in OneNET Studio, the user name is the product ID, and the password is the calculated Token. Click Connect. When the connection parameters are set correctly, it will be connected to the platform. At this time, the device will be displayed as online on the page.

Custom object model

The object model is a digital abstract description of the equipment, describing what the equipment of this model is, what it can do and what services it can provide externally. The object model digitizes the physical equipment in the physical space, and constructs the data model of the entity in the cloud, that is, the entity in the physical space is formatted and represented in the cloud. Taking the data of temperature / humidity sensor and light intensity / proximity position sensor as examples, this paper defines the object model.

  Click the "product management" page, the "details" operation of the corresponding product in the product list, enter the object model setting page, click "set object model", add or select the object model function point according to the demand, and click "save" after editing the function point to make the object model template effective.

The object model customized in this article is shown in the figure above. The detailed description of the object model can be accessed   Object model [4]   Learn.

OneOS application development

OneOS and tools download

At present, the OneOS code has been open source, and developers can go there   OneOS warehouse [5]   perhaps   OneOS official website [6]   Download.

OneOS cube is a command-line based development tool of OneOS operating system. It provides functions such as system configuration, project compilation and construction, package contribution and download, etc. The download and instructions of OneOS cube tool can be accessed   Setting up OneOS cube environment [7]   Learn.

Hardware environment preparation

This paper uses the official Wanlian Chuangshi L475 development board of OneOS as the hardware platform.

 

The STM32L475VGT6 chip is used in Wanlian Chuangshi L475 development board. STM32L4 Series MCU can timely adjust the voltage according to different application requirements during microprocessor operation, so as to realize the dynamic balance of power consumption. This function is applicable to low-power peripherals (LP UART, LP timer), security and security features, a large number of intelligent peripherals in STOP mode, and advanced low-power analog peripherals such as operational amplifier, comparator, LCD, 12 bit DAC and 16 bit ADC (hardware oversampling).

For detailed documentation of Wanlian development board, please refer to   Wanlian development board development document [8]

Software environment preparation

The following software environments need to be prepared for the example project of Wanxiang development board:

• MDK development environment installs MDK-ARM 5.27 (official version or evaluation version, version 5.14 or above). It is recommended to use the latest version of Keil to avoid unnecessary problems. Refer to Keil MDK installation for installation methods.

• connect and install Jlink driver to facilitate download and debugging;

In order to deepen the development process, developers can use the blank example project provided in this paper to develop and complete the development of a simple Internet of things application step by step.

Light up the universal coupling development board

Complete the hardware connection of the universal coupling development board, as shown in the figure below:

Unzip the blank sample project provided in this article and place it in the OneOS/projects directory, as shown in the following figure:

Enter the stm32l475 CMC oneos demo directory, open the MDK project, click the Build button in the upper left corner, and wait for the compilation to complete.

When you see the output of 0 error (s) and 0 warning (s), it indicates that the compilation is completed. At this time, click the Download button in the upper left corner to Download the program to the development board.

  When the program is downloaded, the serial port will output Hello OneOS!, Represents that the program in the development board runs successfully!

Read sensor data

OneOS abstracts the device driver model on the basis of various peripherals, effectively improves the reusability and portability of code, decouples modules hierarchically, and reduces the development difficulty of each layer.

This paper will use the API provided by the Sensor framework in OneOS to read the data of AHT10 temperature / humidity Sensor and AP3216C light intensity / proximity position Sensor on the universal coupling development board.

Sensor frame configuration

Right click stm32l475 CMC oneos demo to open the oneos cube tool, and use menuconfig to configure the Sensor framework, as shown below:

(Top) → Drivers→ I2C
[*] Using I2C device drivers
[*]     Use GPIO to simulate I2C
(10)        simulate I2C bus delay(us)
[ ]         Enable I2C1 BUS (software simulation)  ----
[ ]         Enable I2C2 BUS (software simulation)  ----
[*]         Enable I2C3 BUS (software simulation)  --->
[ ]         Enable I2C4 BUS (software simulation)  ----
(Top) → Drivers→ Sensors                                            
[*] Using sensor device drivers
[ ]     Enable sht20  ----
[*]     Enable aht10  --->
    (soft_i2c3) aht10 i2c bus name
    (0x38) aht10 i2c addr(7bit)
[ ]     Enable adxl345  ----
[ ]     Enable bh1750  ----
[ ]     Enable bmp180  ----
[ ]     Enable mpu6xxx  --->
[ ]     Enable ak8963  ----
[ ]     Enable lsm6dsl  ----
[*]     Enable ap3216c  --->
    (soft_i2c3) ap3216c i2c bus name
    (0x1e) ap3216c i2c addr

After completing the configuration, exit menuconfig and save the configuration. Use the command scons --ide=mdk5 to update the MDK project settings. After the command is executed, reopen the MDK project.

Sensor related codes and groups will be added to the MDK project. Add the following code to the main function to read and print the value of the sensor.

 

/* Include header file */
#include <os_kernel.h>
#include <sensors/sensor.h>

#include <stdio.h>

static os_device_t *sensor_temp  = OS_NULL;
static os_device_t *sensor_humi  = OS_NULL;
static os_device_t *sensor_light = OS_NULL;
static os_device_t *sensor_ps    = OS_NULL;

/* Sensor initialization */
static void sensor_init(void)
{   
    /* Find device by sensor device name */
    sensor_temp = os_device_find("temp_aht10");
    OS_ASSERT(sensor_temp != OS_NULL);
    sensor_humi = os_device_find("humi_aht10");
    OS_ASSERT(sensor_humi != OS_NULL);
    sensor_light = os_device_find("li_ap3216c");
    OS_ASSERT(sensor_light != OS_NULL);
    sensor_ps = os_device_find("pr_ap3216c");
    OS_ASSERT(sensor_ps != OS_NULL);

    /* Turn on the sensor device */
    os_device_open(sensor_temp, OS_DEVICE_FLAG_RDWR);
    os_device_open(sensor_humi, OS_DEVICE_FLAG_RDWR);
    os_device_open(sensor_light, OS_DEVICE_FLAG_RDWR);
    os_device_open(sensor_ps, OS_DEVICE_FLAG_RDWR);
}

int main(void)
{
    printf("Hello, OneOS!\n");

    struct os_sensor_data sensor_data;

    sensor_init();

    /* Read temperature sensor data */
    os_device_read(sensor_temp, 0, &sensor_data, sizeof(struct os_sensor_data));
    printf("temp: %.2f\n", (double)sensor_data.data.temp / 1000);

    /* Read humidity sensor data */
    os_device_read(sensor_humi, 0, &sensor_data, sizeof(struct os_sensor_data));
    printf("humi: %.2f\n", (double)sensor_data.data.humi / 1000);

    /* Read light sensor data */
    os_device_read(sensor_light, 0, &sensor_data, sizeof(struct os_sensor_data));
    printf("light: %.2f\n", (double)sensor_data.data.light / 1000);

    /* Read proximity sensor data */
    os_device_read(sensor_ps, 0, &sensor_data, sizeof(struct os_sensor_data));
    printf("ps: %d\n", sensor_data.data.raw);

    return 0;
}

Compile and download to the Wanlian development board for operation. You can see the printed sensor value through the serial port.

Detailed descriptions of OneOS drivers and sensor devices can be accessed   Sensor device user development [9]   Learn.

Establish thread read sensor

The above example code can only read and print sensor values once. You can establish a task in OneOS to cycle reading and printing sensor values. Task is the smallest scheduling unit in OneOS operating system. Modify the above code as follows:

 

......

/* Sensor initialization */
static void sensor_init(void)
{   
    ......
}

static void sensor_read_entry(void *parameter)
{
    struct os_sensor_data sensor_data;

    /* Cycle reading sensor data */
    while (1)
    {   
        printf("---------Sensor Data--------\n");
        /* Read temperature sensor data */
        os_device_read(sensor_temp, 0, &sensor_data, sizeof(struct os_sensor_data));
        printf("temp: %.2f\n", (double)sensor_data.data.temp / 1000);

        /* Read humidity sensor data */
        os_device_read(sensor_humi, 0, &sensor_data, sizeof(struct os_sensor_data));
        printf("humi: %.2f\n", (double)sensor_data.data.humi / 1000);

        /* Read light sensor data */
        os_device_read(sensor_light, 0, &sensor_data, sizeof(struct os_sensor_data));
        printf("light: %.2f\n", (double)sensor_data.data.light / 1000);

        /* Read proximity sensor data */
        os_device_read(sensor_ps, 0, &sensor_data, sizeof(struct os_sensor_data));
        printf("ps: %d\n", sensor_data.data.raw);
        printf("----------------------------\n");

        os_task_mdelay(3000); /* Delay 3 seconds */
    }
}

int main(void)
{
    printf("Hello, OneOS!\n");

    sensor_init();

    /* Create sensor read task */
    os_task_t *sensor_read_task = os_task_create("sensor_read", 
                                                 sensor_read_entry,
                                                OS_NULL,
                                                1024,
                                                20,
                                                5);
    if (sensor_task != OS_NULL)
    {
        os_task_startup(sensor_read_task);
    }

    return 0;
}

Compile and download to the Wanlian development board for operation. You can see the printed cyclic read sensor values through the serial port.

Details about OneOS task management and scheduling can be accessed   Task management and scheduling [10]   Learn.

Delivering sensor data through message queuing

The sensor data read by the sensor reading task can be saved in the structure, and then sent to the message queue for saving. The sensor processing task can read sensor data from the message queue and process it. Modify the above example code to create a new message queue and sensor processing thread. The sensor processing thread reads data from the message queue and prints the data in the specified format.

 

#include <os_kernel.h>
#include <sensors/sensor.h>
#include <stdio.h>

......

static os_mq_t *sensor_mq = OS_NULL;

typedef struct sensor_data
{
    float temp;
    float humi;
    float light;
    int ps;
} sensor_data_t;

static void sensor_init(void)
{   
    ......
}

static void sensor_read_entry(void *parameter)
{
    struct os_sensor_data tmp_data;
    sensor_data_t data;

    /* Cycle reading sensor data */
    while (1)
    {   
        /* Read temperature sensor data */
        os_device_read(sensor_temp, 0, &tmp_data, sizeof(struct os_sensor_data));
        data.temp = (float)tmp_data.data.temp / 1000;

        /* Read humidity sensor data */
        os_device_read(sensor_humi, 0, &tmp_data, sizeof(struct os_sensor_data));
        data.humi = (float)tmp_data.data.humi / 1000;

        /* Read light sensor data */
        os_device_read(sensor_light, 0, &tmp_data, sizeof(struct os_sensor_data));
        data.light = (float)tmp_data.data.light / 1000;

        /* Read proximity sensor data */
        os_device_read(sensor_ps, 0, &tmp_data, sizeof(struct os_sensor_data));
        data.ps = tmp_data.data.raw;

        os_mq_send(sensor_mq, &data, sizeof(sensor_data_t), OS_IPC_WAITING_FOREVER);

        os_task_mdelay(3000); /* Delay 3 seconds */
    }
}

static void sensor_process_entry(void *parameter)
{
    sensor_data_t data;
    os_size_t data_size;

    while (1)
    {
        os_mq_recv(sensor_mq, &data, sizeof(sensor_data_t), OS_IPC_WAITING_FOREVER, &data_size);

        printf("---------Sensor Data--------\n");

        printf("temp: %.2f\n", data.temp);
        printf("humi: %.2f\n", data.humi);
        printf("light: %.2f\n", data.light);
        printf("ps: %d\n", data.ps);

        printf("----------------------------\n");
    }
}

int main(void)
{
    printf("Hello, OneOS!\n");

    sensor_init();

    sensor_mq = os_mq_create("sensor_mq", sizeof(sensor_data_t), 10, OS_IPC_FLAG_PRIO);
    OS_ASSERT(sensor_mq != OS_NULL);

    /* Create sensor read task */
    os_task_t *sensor_read_task = os_task_create("sensor_read", 
                                                 sensor_read_entry,
                                                 OS_NULL,
                                                 1024,
                                                 20,
                                                 5);

    OS_ASSERT(sensor_read_task != OS_NULL);
    os_task_startup(sensor_read_task);

    /* Create sensor processing task */
    os_task_t *sensor_process_task = os_task_create("sensor_process",
                                                   sensor_process_entry,
                                                   OS_NULL,
                                                   2048,
                                                   15,
                                                   5);
    OS_ASSERT(sensor_process_task != OS_NULL);
    os_task_startup(sensor_process_task);

    return 0;
}

The details of OneOS message queue and data communication between tasks can be accessed   Message queuing [11]   Learn.

Access OneNET Studio via MQTT

MQTT component

The OneOS operating system implements the MQTT protocol function by porting the PAHO MQTT software package. Developers can easily integrate MQTT components into their own applications through the menuconfig graphical interface in the OneOS Cube. The configuration of MQTT components is as follows:

(Top) → Components→ Network→ Protocols→ MQTT

[*] Enable Paho MQTT
[ ]     Enable Paho MQTT TLS encrypt
[ ]     Enable Paho MQTT sample

The configuration and API description of MQTT components can be accessed   MQTT user programming manual [12]   Learn.

cJSON component

Using OneNET Studio   OneJSON   As a model of things communication protocol, onejson protocol is a data exchange specification designed for the development field of the Internet of things. The data format is JSON, which is used for two-way communication between the device end and the Internet of things platform, and more conveniently realizes and standardizes the business data interaction between the device end and the Internet of things platform.

The OneOS operating system provides the ability to create and parse JSON format data through the cJSON component. The configuration of the cJSON component is as follows:

(Top) → Thirdparty→ cJSON

[*] cJSON: Ultralightweight JSON parser in ANSI C

A detailed description of cjson can be accessed   cJSON[13]   Learn.

Molink component

OneOS operating system provides the ability of interconnection between devices and platforms through molink module interconnection kit. Molink realizes the unified control of different communication modules through architecture design and module adaptation, and provides a unified API interface to the upper framework and applications, so that developers can complete the development of network related applications without caring about the differences between different modules.

This paper takes the use of ML302 as an example. ML302 is the latest LTE Cat.1 module launched by China Mobile. ML302 supports TD LTE / FDD LTE communication system and adopts LCC+LGA packaging mode. Rich Internet protocols, industry standard interfaces and functions, and support Windows, Linux and Android drivers. ML302 can be widely used in many fields of M2M, such as sharing, financial payment, POC, industrial control, etc.

ML302 in Molink is configured as follows:

(Top) → Components → Network → Molink → Enable IoT modules support → Modules → 4G CAT1 Modules Support → ML302 → ML302

[*] Enable ML302 Module Object Auto Create
(uart4) ML302 Interface Device Name
(115200) ML302 Interface Device Rate
(512)   The maximum length of AT command data accepted
-*- Enable ML302 Module General Operates
-*- Enable ML302 Module Network Service Operates
[*] Enable ML302 Module Ping Operates
[*] Enable ML302 Module Ifconfig Operates
-*- Enable ML302 Module Network TCP/IP Operates
[*] Enable ML302 Module BSD Socket Operates
[ ] Enable ML302 Module MQTT Client Operates

If you need to use other communication modules, just reconfigure them under the molink menu. You can access the molink configuration and API instructions   Molink user programming manual [14]   Learn.

After configuring the above MQTT, cJSON and Molink components, use the command scons --ide=mdk5 in the oneos cube tool to update the MDK project settings

MQTT, cJSON and Molink related codes will be added to the MDK project, compiled and downloaded to the wancouple development board. When you see the following log output, it indicates that the initialization of ML302 module is successful.

Sample code

Write the code shown below to connect to the OneNET Studio platform and publish the sensor data to the platform.

#include <os_kernel.h>
#include <sensors/sensor.h>
#include <MQTTOneOS.h>
#include <MQTTClient.h>
#include <cJSON.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static os_device_t *sensor_temp  = OS_NULL;
static os_device_t *sensor_humi  = OS_NULL;
static os_device_t *sensor_light = OS_NULL;
static os_device_t *sensor_ps    = OS_NULL;

static os_mq_t *sensor_mq = OS_NULL;

typedef struct sensor_data
{
    double temp;
    double humi;
    double light;
    int ps;
} sensor_data_t;

static void sensor_init(void)
{   
    ......
}

static void sensor_read_entry(void *parameter)
{
    ......
}

#define MQTT_SERVER_IP       "218.201.45.7"
#define MQTT_SERVER_PORT     (1883)
#define MQTT_CLINET_ID       "oneos_test"
#define MQTT_POST_TOPIC      "$sys/9HFp6Cf7i4/oneos_test/thing/property/post"
#define MQTT_COMMAND_TIMEOUT (30000)

#define MQTT_CLIENT_USERNAME "user name"
#define MQTT_CLINET_PASSWORD "user password"

static unsigned char send_buff[512] = {0};
static unsigned char read_buff[512] = {0};

static void sensor_process_entry(void *parameter)
{
    sensor_data_t data;
    os_size_t data_size;

    Network    network;
    MQTTClient client;

    MQTTNetworkInit(&network, MQTT_SERVER_IP, MQTT_SERVER_PORT, OS_NULL);
    MQTTClientInit(&client,
                   &network,
                   MQTT_COMMAND_TIMEOUT,
                   send_buff,
                   sizeof(send_buff),
                   read_buff,
                   sizeof(read_buff));

    int rc = network.connect(&network);
    if (0 != rc)
    {
        printf("Establish network failed, check MQTT server ip and port");
        return;
    }

    MQTTPacket_connectData connectData = MQTTPacket_connectData_initializer;

    connectData.clientID.cstring = MQTT_CLINET_ID;
    connectData.username.cstring = MQTT_CLIENT_USERNAME;
    connectData.password.cstring = MQTT_CLINET_PASSWORD;

    if ((rc = MQTTConnect(&client, &connectData)) != 0)
    {
        printf("Return code from MQTT connect is %d", rc);
        return;
    }
    else
    {
        printf("MQTT Client Connected");
    }

    while (1)
    {
        os_mq_recv(sensor_mq, &data, sizeof(sensor_data_t), OS_IPC_WAITING_FOREVER, &data_size);

        printf("---------Sensor Data--------\n");

        /* Round to two decimal places */
        data.temp  = ((int)(data.temp * 100 + 0.5)) / 100.0;
        data.humi  = ((int)(data.humi * 100 + 0.5)) / 100.0;
        data.light = ((int)(data.light * 100 + 0.5)) / 100.0;

        printf("temp: %.2f\n", data.temp);
        printf("humi: %.2f\n", data.humi);
        printf("light: %.2f\n", data.light);
        printf("ps: %d\n", data.ps);

        printf("----------------------------\n");

        if (MQTTIsConnected(&client))
        {
            /* Encapsulate data in OneJSON format */
            cJSON *onejson_head = cJSON_CreateObject();

            cJSON_AddStringToObject(onejson_head, "id", "123");
            cJSON_AddStringToObject(onejson_head, "version", "1.0");

            cJSON *onejson_params = cJSON_CreateObject();

            cJSON *onejson_temp = cJSON_CreateObject();
            cJSON_AddNumberToObject(onejson_temp, "value", data.temp);
            cJSON *onejson_humi = cJSON_CreateObject();
            cJSON_AddNumberToObject(onejson_humi, "value", data.humi);
            cJSON *onejson_light = cJSON_CreateObject();
            cJSON_AddNumberToObject(onejson_light, "value", data.light);
            cJSON *onejson_ps = cJSON_CreateObject();
            cJSON_AddNumberToObject(onejson_ps, "value", data.ps);

            cJSON_AddItemToObject(onejson_params, "temp", onejson_temp);
            cJSON_AddItemToObject(onejson_params, "humi", onejson_humi);
            cJSON_AddItemToObject(onejson_params, "light", onejson_light);
            cJSON_AddItemToObject(onejson_params, "ps", onejson_ps);

            cJSON_AddItemToObject(onejson_head, "params", onejson_params);

            MQTTMessage message;

            message.qos      = QOS1;
            message.retained = 0;
            message.payload = cJSON_Print(onejson_head);

            message.payloadlen = strlen(message.payload);

            /* Submit data to OneOS Studio platform */
            rc = MQTTPublish(&client, MQTT_POST_TOPIC, &message);
            if (rc != 0)
            {
                printf("MQTT Client publish error %d\n", rc);
            }

            printf("MQTT Client publish success!\n");

            free(message.payload);
            cJSON_Delete(onejson_head);
        }
    }
}

int main(void)
{
    ......
}

Among them, the topic reported by MQTT device properties is $sys / {PID} / {device name} / thing / property / post. You can access the details of MQTT communication topics   MQTT communication topic [15]   Learn.

Compile the code and download it to Wanlian development board. When you see MQTT Client publish success output in the serial port! It indicates that the new attribute value is successfully published to the object model of OneNET Studio platform.

Open the device details page of OneNET Studio to see the data of AHT10 temperature / humidity sensor and AP3216C light intensity / proximity position sensor reported by OneOS.

common problem

1. I don't have ML302 module. How can I use other modules to complete the above example?

This example does not depend on specific models of modules. Developers can reconfigure and select modules under the menu of Molink.

2. I don't have a universal coupling development board. How can I use other development boards to complete the above example?

OneOS has adapted and supported many development boards. You can check the supported development board models in the projects directory and select a development board suitable for you.

3. What if the Token calculated by onenet Token calculation tool cannot be connected to the platform?

Please try to adjust the order of parameters in Token, as shown in the following figure:

 

References

[1]   Onenet studio quick start:   https://open.iot.10086.cn/doc/iot_platform/book/get-start/login.html#1
[2]   Create product:   https://open.iot.10086.cn/doc/iot_ platform/book/device-connect&manager/product-create.html
[3]   Equipment safety certification:   https://open.iot.10086.cn/doc/iot_ platform/book/device-connect&manager/device-auth.html#%E8%AE%BE%E5%A4%87%E5%AE%89%E5%85%A8%E8%AE%A4%E8%AF%81
[4]   Object model:   https://open.iot.10086.cn/doc/iot_ platform/book/device-connect&manager/thing-model/introduce.html
[5]   Oneos warehouse:   https://gitee.com/cmcc-oneos/OneOS
[6]   OneOS official website:   https://os.iot.10086.cn/download/
[7]   Oneos cube environment construction:   https://os.iot.10086.cn/doc/quick_start/setup_env/oneos_cube.html
[8]   Development documents of Wanlian development board:   https://os.iot.10086.cn/doc/hardware_support/oneos_dev_board.html
[9]   Sensor device user development:   https://os.iot.10086.cn/doc/user_guide/driver/sensor.html
[10]   Task management and scheduling:   https://os.iot.10086.cn/doc/api_refer/kernel/task.html
[11]   Message queuing:   https://os.iot.10086.cn/doc/api_refer/kernel/mq.html
[12]   MQTT user programming manual:   https://os.iot.10086.cn/doc/user_guide/components/ug_pahomqtt.html
[13] cJSON: https://github.com/DaveGamble/cJSON
[14]   Molink user programming manual:   https://os.iot.10086.cn/doc/user_guide/components/ug_molink_v1.1.0.html
[15]   Mqtt communication subject:   https://open.iot.10086.cn/doc/iot_ platform/book/device-connect&manager/MQTT/topic.html#2

Author: Bai Lingzhong mobile OneOS

 

Tags: Python IoT

Posted on Wed, 17 Nov 2021 07:07:18 -0500 by dysonline