使用的C语言Link SDK将通信模组接入物联网平台。
设备端SDK配置
- 下载C语言Link SDK 3.0.1版。
- 从下载包中提取SDK代码。本文以Linux系统操作为例。
- 运行make menuconfig。
- 选中ATM Configurations,单击Select。
- 选中AT HAL Configurations,单击Select。
- 配置如下项目。
FEATURE_PLATFORM_HAS_STDINT=y FEATURE_PLATFORM_HAS_OS=y FEATURE_INFRA_STRING=y FEATURE_INFRA_NET=y FEATURE_INFRA_LIST=y FEATURE_INFRA_LOG=y FEATURE_INFRA_LOG_ALL_MUTED=y FEATURE_INFRA_LOG_MUTE_FLW=y FEATURE_INFRA_LOG_MUTE_DBG=y FEATURE_INFRA_LOG_MUTE_INF=y FEATURE_INFRA_LOG_MUTE_WRN=y FEATURE_INFRA_LOG_MUTE_ERR=y FEATURE_INFRA_LOG_MUTE_CRT=y FEATURE_INFRA_TIMER=y FEATURE_INFRA_SHA256=y FEATURE_INFRA_REPORT=y FEATURE_INFRA_COMPAT=y FEATURE_DEV_SIGN=y FEATURE_MQTT_COMM_ENABLED=y FEATURE_MQTT_DEFAULT_IMPL=y FEATURE_MQTT_DIRECT=y FEATURE_DEVICE_MODEL_CLASSIC=y FEATURE_ATM_ENABLED=y FEATURE_AT_TCP_ENABLED=y FEATURE_AT_PARSER_ENABLED=y FEATURE_AT_TCP_HAL_SIM800=y
- 配置完成后,运行./extract.sh提取代码。
提取的代码位于output/eng目录。
其中,各子目录分别包含的代码如下表。
目录 代码内容 atm AT指令收发模块 dev_sign 设备身份认证模块 infra 内部实现模块 mqtt MQTT协议模块 wrappers HAL对接模块 - 在wrappers目录下,新建文件wrappers.c,该文件中的代码需实现以下HAL函数。
int32_t HAL_AT_Uart_Deinit(uart_dev_t *uart) int32_t HAL_AT_Uart_Init(uart_dev_t *uart) int32_t HAL_AT_Uart_Recv(uart_dev_t *uart, void *data, uint32_t expect_size, uint32_t *recv_size, uint32_t timeout) int32_t HAL_AT_Uart_Send(uart_dev_t *uart, const void *data, uint32_t size, uint32_t timeout) int HAL_GetDeviceName(char device_name[IOTX_DEVICE_NAME_LEN]) int HAL_GetDeviceSecret(char device_secret[IOTX_DEVICE_SECRET_LEN]) int HAL_GetFirmwareVersion(char *version) int HAL_GetProductKey(char product_key[IOTX_PRODUCT_KEY_LEN]) void *HAL_Malloc(uint32_t size) void HAL_Free(void *ptr) void *HAL_MutexCreate(void) void HAL_MutexDestroy(void *mutex) void HAL_MutexLock(void *mutex) void HAL_MutexUnlock(void *mutex) void *HAL_SemaphoreCreate(void) void HAL_SemaphoreDestroy(void *sem) void HAL_SemaphorePost(void *sem) int HAL_SemaphoreWait(void *sem, uint32_t timeout_ms) int HAL_ThreadCreate(void **thread_handle, void *(*work_routine)(void *), void *arg, hal_os_thread_param_t *hal_os_thread_param, int *stack_used) void HAL_SleepMs(uint32_t ms) void HAL_Printf(const char *fmt, ...) int HAL_Snprintf(char *str, const int len, const char *fmt, ...) uint64_t HAL_UptimeMs(void)
下载wrappers.c文件的代码Demo。
在代码Demo中,替换设备证书信息为您的设备证书信息。
说明 如果您不是使用NUCLEO-F103RB通信模组开发板,需在配置时,设置FEATURE_AT_TCP_HAL_SIM800=n
。且wrappers.c文件中代码需实现以下HAL函数。int HAL_AT_CONN_Close(int fd, int32_t remote_port) int HAL_AT_CONN_Deinit(void) int HAL_AT_CONN_DomainToIp(char *domain, char ip[16]) int HAL_AT_CONN_Init(void) int HAL_AT_CONN_Send(int fd, uint8_t *data, uint32_t len, char remote_ip[16], int32_t remote_port, int32_t timeout) int HAL_AT_CONN_Start(at_conn_t *conn) int32_t HAL_AT_Uart_Deinit(uart_dev_t *uart) int32_t HAL_AT_Uart_Init(uart_dev_t *uart) int32_t HAL_AT_Uart_Recv(uart_dev_t *uart, void *data, uint32_t expect_size, uint32_t *recv_size, uint32_t timeout) int32_t HAL_AT_Uart_Send(uart_dev_t *uart, const void *data, uint32_t size, uint32_t timeout) int HAL_GetDeviceName(char device_name[IOTX_DEVICE_NAME_LEN]) int HAL_GetDeviceSecret(char device_secret[IOTX_DEVICE_SECRET_LEN]) int HAL_GetFirmwareVersion(char *version) int HAL_GetProductKey(char product_key[IOTX_PRODUCT_KEY_LEN]) void *HAL_Malloc(uint32_t size) void HAL_Free(void *ptr) void *HAL_MutexCreate(void) void HAL_MutexDestroy(void *mutex) void HAL_MutexLock(void *mutex) void HAL_MutexUnlock(void *mutex) void *HAL_SemaphoreCreate(void) void HAL_SemaphoreDestroy(void *sem) void HAL_SemaphorePost(void *sem) int HAL_SemaphoreWait(void *sem, uint32_t timeout_ms) int HAL_ThreadCreate(void **thread_handle, void *(*work_routine)(void *), void *arg, hal_os_thread_param_t *hal_os_thread_param, int *stack_used) void HAL_SleepMs(uint32_t ms) void HAL_Printf(const char *fmt, ...) int HAL_Snprintf(char *str, const int len, const char *fmt, ...) uint64_t HAL_UptimeMs(void)
- 将SDK整合到IAR工程中。如下图所示。
- 运行SDK,进行测试。运行成功后,设备端本地日志如下图所示。
登录物联网平台控制台,在对应实例下的监控运维 > 日志服务中,也可查看设备上报数据到云端的日志。