开发准备

开发须知

设备连接网络的形式为WiFi、以太网或者移动蜂窝网络。对于使用WiFi连接网络的设备,如果设备有操作界面,则配置网络可以直接通过用户交互界面选择WiFi热点输入WiFi密码进行。如果设备没有操作界面,配置网络可以通过类似于嵌入式设备的SmartConfig方法进行。对于使用以太网或者移动蜂窝网连接网络的设备,认为设备可以自动连接网络。

开发准备

在进行设备端开发前,需要进行如下开发准备:
1. 注册开发者账号,获取设备的DomainSubDomainDomainIdSubDomainId。 2. 确定开发者要使用的环境。AbleCloud的环境分为开发使用的test环境和正式生产使用的生产环境。
3. 在设备密钥页面选择设备和云端通信采用的加密方式,并获取密钥。

注意:
对于Linux设备,云端和设备的数据交互我们建议采用JSON格式。通信方式根据具体情况填写。

产品开发在测试环境进行,测试通过之后,需要向AbleCloud提交上线申请,申请通过后会获得正式环境帐号。

将产品由测试环境转移到正式环境的详细操作步骤详见产品上线操作说明

软件开发配置

搭建开发环境

  • 1.设备使用的嵌入式Linux系统
  • 2.设备使用的Linux交叉编译器
  • 3.Ablecloud SDK(必选,libACDeviceTcp.a。使用交叉编译器编译生成)
  • 4.libcurl(可选,使用Http进行文件传输则必选。使用交叉编译器生成)
  • 5.libcrypto(可选,使用Http进行文件传输则必选。使用交叉编译器生成)

配置设备连接的云端服务器环境

Ablecloud为开发者提供了两套环境:用于开发及上线前测试的test环境以及用于生产的生产环境。对于生产环境,又根据设备投放的区域分为不同的环境(如北美环境,欧洲环境等),开发者需要确定使用哪一个环境,并对固件进行配置。配置时,需要修改配置文件ac_cfg.h中的宏CLOUD_ADDR的配置值(参见下面描述)。

打开工程里的Include/ac_cfg.h文件,将在注册开发者账号和注册产品时申请到的主域id更新到MAJOR_DOMAIN_ID,子域id更新到SUB_DOMAIN_ID,设备私钥更新DEFAULT_IOT_PRIVATE_KEY,设备物理id更新到DEVICE_ID。如果使用设备的MAC地址作为设备Id,或者需要从文件中读取设备ID,则此处的DEVICE_ID可以不关心。 如下所示:


    #ifndef  __AC_CFG_H__ 
    #define  __AC_CFG_H__

    /*
    AC_TEST_SERVER :开发环境
    AC_CH_SERVER:国内环境,
    AC_US_SERVER:美洲环境,
    AC_EU_SERVER:欧洲环境,
    AC_EA_SERVER:东南亚环境
    */
    #define CLOUD_ADDR  AC_CH_SERVER  


    //[8,64)字节,不足的前面补0,格式不限。如果使用MAC地址作为设备Id,此处可以不用关心
    #define DEVICE_ID "66666666"  

    #define MAJOR_DOMAIN "ablecloud" /*主域*/

    #define MAJOR_DOMAIN_ID 3/*主域id*/

    #define SUB_DOMAIN  "test" /*子域*/

    #define SUB_DOMAIN_ID  6 /*子域id*/

    #define DEFAULT_IOT_PRIVATE_KEY {\
     0xE5,0x49,0x6A,0xCC,\
     0x9D,0xE8,0x68,0x76,\
     0xCE,0x5D,0xF4,0xB9,\
     0xD5,0xE5,0x30,0x44,\
     0xB6,0x39,0x9B,0x6C,\
     0xB2,0x38,0xC8,0xCC,\
     0x59,0x1B,0xD0,0x3C,\
     0x9B,0x03,0x00,0x6B,\
     0xFD,0xDE,0xB1,0x99,\
     0x72,0x35,0xE7,0x9E,\
     0xD8,0xD0,0x64,0x73,\
     0xF5,0xE0,0x44,0xB9,\
     0xE7,0x35,0xEB,0x65,\
     0xCE,0xE9,0xF1,0x54,\
     0xEB,0x14,0x84,0x9A,\
     0x6F,0x5F,0x24,0x43,\
     0x34,0xCC,0x61,0xE7,\
     0x65,0xE7,0x6C,0x1A,\
     0x8F,0x41,0x18,0x03,\
     0x3D,0xF9,0xBC,0x91,\
     0x02,0x62,0x87,0xFF,\
     0x10,0xD7,0x50,0xE9,\
     0xF3,0x52,0xCE,0xDB,\
     0x58,0xF2,0xBE,0x49,\
     0xE4,0x9B,0x1A,0x58,\
     0x90,0x53,0x8F,0x7C,\
     0xF6,0xDD,0x3B,0x12,\
     0x78,0x9C,0x59,0xDA\
    }

    #define AC_FLASH_PATH "/tmp"  /*存储Ablecloud配置信息的父目录的绝对路径,该路径内的文件必须不能被其他进程擦除,空间需求不大于2KB*/

    /*just for Linux and android device.
    从http server下载文件时的最大阻塞时间,不能小于60(开发者一般不需要关心)
    */
    #define AC_BLOCKTIME_WHEN_GETFILE 60   

    #endif

配置固件版本号

使用Ablecloud提供的Linux SDK编译得到的固件的版本号在ac_hal.c中定义:

    /*不能超过20个字节,超出部分会被截断*/
    u8 g_u8EqVersion[ZC_EQVERSION_LEN] = "AC_LI_20161109-01";  

如果开发者自定的版本号比较复杂,需要函数生成,则可以自己添加版本号生成函数,之后在Sample/ac_hal.c中的函数ac_init中将生成的版本号赋值给数组g_u8EqVersion

该版本号对应于云端控制台中看到的设备的MCU版本号,如下所示:
新建产品

设备在Ablecloud后台上传并发布新的OTA版本时,需要填写新的OTA固件的版本号,该版本号也要与g_u8EqVersion中填写的版本号一致。

注意
开发者自定义的版本号字符串长度不能超过20个字节,超过的部分会被截断

配置设备ID(仅使用自定义设备ID进行注册时用)

SDK默认使用设备的网卡0的MAC地址做为设备ID进行注册。如果开发者需要使用自定义的ID做为设备ID,则需要:
(1)将Sample/ac_hal.c文件中的宏#define REGISTER_WITH_MAC注释掉
(2)将Include/ac_cfg.h中,修改宏#define DEVICE_ID "HonYarLinux"的值,改为开发者自定义的设备ID

如果开发者自定义的设备ID需要从其他文件读取或生成,则可以自己添加获取函数,之后在Sample/ac_hal.c中的函数ac_init中将得到的设备ID赋值给数组g_u8DeviceId

注意
开发者自定义的设备ID必须是字符串的形式
开发者自定义的设备ID字符串长度不能超过64个字节,超过的部分会被截断
设备ID只能由[a,z],[A,Z],[0,9]组成,即只能包含26个英文字母和阿拉伯数字。Ablecloud对设备ID中的英文字母不区分大小写

配置Ablecloud的配置信息的存储路径

Ablecloud SDK在设备端需要存储一些配置信息,开发者需要提供文件系统中的目录给Ablecloud。Ablecloud配置信息耗费的空间不超过2KB,要求不能被其他进程修改或擦除,断电不能丢失。

Ablecloud配置信息文件的默认存储路径为 "/tmp",联网后,会生成文件"/tmp/ablecloudinfo"和文件"/tmp/ablecloudliscense",如果开发者要更改路径,可以在ac_cfg.c中修改宏AC_FLASH_PATH的值