快速开始

在此之前,请完成租户开通,项目创建。

下面以esp8266_12f硬件平台开发作为示例说明。

关于esp8266_12f的平台介绍,开发环境搭建请参考官方相关文档。

硬件开发板(别名: 小黑板)如下图:

小黑板

1. 设备模型创建

使用硬件上的资源,建立如下设备模型,设备类型选择照明设备light(具体操作步骤参考应用开发指南):

设备模型

最终可以完成RGB灯的控制、环境亮度的获取和设备重启

2. 下载SDK

在网页模型页面,下载该设备模型对应的SDK

下载SDK

在下载的SDK中包括多个平台,关于esp8266_12f的平台目录结构如下:

glodon.iot.sdk/
├── configs
│   └── esp8266_12f.mk
├── doc
│   ├── get-started.md
│   ├── hardware-dev-guide.md
│   └── images
│       ├── dev_control.png
│       ├── dev_debug_control.png
│       ├── dev_debug_key.jpg
│       ├── dev_debug_read.png
│       ├── dev_debug_write.png
│       ├── device-to-cloud.png
│       ├── dev_log.png
│       ├── dev_model.png
│       ├── dev_sdk_dowload.png
│       └── esp8266-12f.jpg
├── include
│   ├── glodon_iot_client.h
│   ├── glodon_iot_error.h
│   └── glodon_iot_log.h
├── lib
│   └── esp8266_12f
│       ├── libglodoniot.a
│       └── libplatform.a
└── samples
    └── esp8266_12f
        └── src
            ├── driver
            │   ├── Makefile
            │   └── uart.c
            ├── include
            │   └── uart.h
            ├── Makefile
            ├── update.sh
            └── user
                ├── app_data.c
                ├── app_data.h
                ├── main.c
                ├── Makefile
                ├── model
                │   ├── cJSON.c
                │   ├── cJSON.h
                │   ├── dm_light_data.c
                │   ├── dm_light_data.h
                │   ├── glodon_iot_data_def.h
                │   ├── glodon_iot_data_internal.c
                │   └── glodon_iot_data_internal.h
                └── README.md

3. 硬件控制准备

3.1 RGB灯

在小黑板的公开资料中有文件: RGB_light.h / RGB_light.c

分别把文件放在 include 和 driver目录下,最终目录结构如下:

glodon.iot.sdk
├── configs
│   └── ... 
├── include
│   └── ...
├── lib
│   └── esp8266_12f
│       └── ...
└── samples
    └── esp8266_12f
        └── app
            ├── driver
            |   ├── RGB_light.c
            │   └── ...
            ├── include
            |   ├── RGB_light.h
            │   └── ...
            ├── ...
            └── user
                └── ...

3.2 环境亮度

该功能已经在esp8266的SDK中已经实现:

uint16 system_adc_read(void);

3.3 重启

该功能已经在esp8266的SDK中已经实现:

void system_restart(void);

4. 代码实现

4.1 硬件初始化

在代码文件glodon_iot_sdk/samples/esp8266_12f/src/user/main.c

函数user_init()中添加如下代码:

void user_init(void)
{
    ...
    RGB_light_init();
    RGB_light_set_color(gRGBValue.r, gRGBValue.g, gRGBValue.b);
    RGB_light_start();
    ...
}

如果使用MQTTS, 需要在函数main_task(), 开启以下注释代码:

    GlodonIotInitParams initParams = {
        .username = (char *)GLODON_IOT_MQTT_USERNAME, 
        .password = (char *)GLODON_IOT_MQTT_PASSWORD,
        .userdata = NULL,
        //.useMqtts = true,
        .onLogOutput = on_log_output,
        .onConnect = on_connect,
    };

4.2 RGB控制

在代码文件glodon_iot_sdk/samples/esp8266_12f/app/user/app_data.h

定义RGB灯的数据类型:

typedef struct {
    uint8_t r;
    uint8_t g;
    uint8_t b;
} RGB_t;

extern RGB_t gRGBValue;

在代码文件glodon_iot_sdk/samples/esp8266_12f/app/user/app_data.c

函数on_app_message()中添加如下代码:

static void on_light_message(GlodonIotClient pClient, IotMetaData_t *metadata, int evt, int argc, void *argv[])
{
    ...
        case GLODON_EVENT_SET_RGBLED:
            {
                int r, g, b;
                char * rgbled = *(char * *)argv[0]; // RGB灯: 三色灯

                // TODO: 添加数据判断
                IOT_DEBUG(pClient, "set: rgbled('%s')", rgbled);
                sscanf(rgbled, "%02x%02x%02x", &r, &g, &b);
                IOT_DEBUG(pClient, "set: rgbled(%x, %x, %x)", r, g, b);
                RGB_light_set_color(r, g, b); // 硬件控制
                gRGBValue.r = r, gRGBValue.g = g, gRGBValue.b = b;
            }
            break;
    ...
}

4.3 重启控制

在代码文件glodon_iot_sdk/samples/esp8266_12f/app/user/app_data.c

函数on_app_message()中添加如下代码:

static void on_light_message(GlodonIotClient pClient, IotMetaData_t *metadata, int evt, int argc, void *argv[])
{
    ...
        case GLODON_EVENT_ACT_REBOOT:
            {
                int delay = *(int *)argv[0]; // 延时

                IOT_DEBUG(pClient, "action: reboot(%d)", delay);
                if(delay == 66) { // TODO: 增加延时逻辑
                    system_restart();
                }
            }
            break;
    ...
}

4.4 状态获取

在代码文件glodon_iot_sdk/samples/esp8266_12f/app/user/app_data.c

函数dm_light_report()中添加如下代码:

static void dm_light_report(GlodonIotClient pClient)
{
    char buf[32] = {0};
    uint16 lightness = 0;

    if (!data) {
        return -1;
    }
    // GRB
    snprintf(buf, sizeof(buf), "%02x%02x%02x", gRGBValue.r, gRGBValue.g, gRGBValue.b);
    data->setRgbLed(data, buf);
    // 亮度
    lightness = system_adc_read();
    data->setLightness(data, lightness);
    IOT_DEBUG(NULL, "lightness = %d", lightness);

    return 0;
}

5. 编译

5.1 编译置

设备认证

export GLODON_IOT_MQTT_USERNAME='ab4d8a88-25f0-48f3-95f7-9dc731b52693'

export GLODON_IOT_MQTT_PASSWORD='022cd688-f20b-46be-a813-29c24f2fc49b'

5.2 编译方法

在目录glodon_iot_sdk/samples/esp8266_12f/src/下执行:

make

提前准备好编译环境

6. 下载

在目录glodon_iot_sdk/samples/esp8266_12f/src/下执行:

./update.sh

该脚本是在Linux下使用的,仅供参考。可以根据你的实际情况下载, 如windows图形工具。

7. 效果展示

状态查看

属性修改

设备控制