使用的C语言Link SDK将通信模组接入物联网平台。

设备端SDK配置

  1. 下载C语言Link SDK 3.0.1版
  2. 从下载包中提取SDK代码。本文以Linux系统操作为例。
    1. 运行make menuconfig
    2. 选中ATM Configurations,单击Select
    3. 选中AT HAL Configurations,单击Select
    4. 配置如下项目。
      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
    5. 配置完成后,运行./extract.sh提取代码。

      提取的代码位于output/eng目录。

      其中,各子目录分别包含的代码如下表。

      目录 代码内容
      atm AT指令收发模块
      dev_sign 设备身份认证模块
      infra 内部实现模块
      mqtt MQTT协议模块
      wrappers HAL对接模块
    6. 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)
                                          
  3. 将SDK整合到IAR工程中。
    如下图所示。
  4. 运行SDK,进行测试。
    运行成功后,设备端本地日志如下图所示。

    登录物联网平台控制台,在对应实例下的监控运维 > 日志服务中,也可查看设备上报数据到云端的日志。