NB-IoT

更新时间:2022-09-08 02:29:10下载pdf

Tuya Connect Kit For NB-IoT 是面向 IoT 领域有经验的开发者提供的轻量级物联网开发套件。具备极小资源占用,极广泛的应用场景,极大的开发自由度等特点,支持终端设备连接到 涂鸦 IoT 开发平台。可以广泛应用在智能家居、智慧城市、户外、出行和工业物联网等领域。

技术架构

NB-IoT

接入方式

SoC 与 OpenCPU 集成

NB-IoT

NB-IoT

AT 模组 + 主控 MCU 集成

NB-IoT

AT 模组集成

NB-IoT

SDK 目录结构说明

├ ── examples(参考例程)
├── include(SDK 头文件,API 接口)
├── src(SDK 源代码)
├── libraries(外部依赖库 CoAP、LwM2M、OneNet、Mbed TLS) 
├── middleware(LwM2M、OneNet 中间件)
├── interface(平台必要移植接口,SDK 功能接口)
├── platform(平台移植接口适配,已经在 Linux 系统下完成适配的例程)
├── utils(通用工具模块)
├── tuyaFilePaths.cmake
├── CMakeLists.txt
├── PortingGuide.md
├── README.md
└── LICENSE

接入链路图

NB-IoT

移植指导

系统

void* system_malloc(size_t n); 分配所需的内存空间,并返回一个指向它的指针。
void* system_calloc(size_t n, size_t size);  分配所需的内存空间,并返回一个指向它的指针,设置分配的内存初始化为零。
void system_free(void *ptr); 释放之前调用 system_malloc,system_calloc 或 system_realloc 所分配的内存空间。
uint32_t system_ticks(); 系统毫秒滴答计数器。
uint32_t system_timestamp(); 获取时间戳。
void system_sleep(uint32_t time_ms); 系统延时。
uint32_t system_random(void); 系统随机数生成。

网络

系统运行在 NB-IoT 模组硬件平台具备 LwM2M 网络协议栈,例如 NB-IoT 模组 OPEN 开发,同时在 tuya_iot_config.h 中定义如下宏:#define RUN_IN_NB_SIDE。SDK 需要通过内部 LwM2M 协议与服务端交互,需要你的平台具备 UDP 协议栈实现以下 API。

INT_T tal_net_socket_create(CONST TUYA_PROTOCOL_TYPE_E type); 创建 UDP 套接字
TUYA_ERRNO tal_net_connect(CONST INT_T fd, CONST TUYA_IP_ADDR_T addr, CONST UINT16_T port); 连接网络
TUYA_ERRNO tal_net_send(CONST INT_T fd, CONST VOID_T *buf, CONST UINT_T nbytes); 发送网络数据
TUYA_ERRNO tal_net_recv(CONST INT_T fd, VOID_T *buf, CONST UINT_T nbytes); 接收网络数据
TUYA_ERRNO tal_net_close(IN CONST INT_T fd);关闭套接字
OPERATE_RET tal_net_set_block(IN CONST INT_T fd,IN CONST BOOL_T block); 设置网络接收为阻塞或非阻塞。默认非阻塞。系统本身为非阻塞时,可以不用实现。
OPERATE_RET tal_net_gethostbyname(CONST CHAR_T *domain, TUYA_IP_ADDR_T *addr); 域名解析接口

系统运行在普通 MCU 端硬件平台不具备LwM2M 网络协议栈,例如 MCU+NB AT 对接,同时在 tuya_iot_config.h 中关闭如下宏定义://#define RUN_IN_NB_SIDE。SDK 需要依赖外部 NB-IoT 模组内部 OneNet 与 LwM2M 接口实现数据收发,SDK 负责激活流程与数据封包解包以及加解密,此时 MCU 仅需要适配以下 API。

CMCC

注册部分可使用 AT 指令自行完成。
OPERATE_RET tuya_nbiot_cmcc_register(TAL_NBIOT_LWM2M_REGISTER_T *reg_params); CMCC 注册
OPERATE_RET tuya_nbiot_cmcc_deregister(void); CMCC 去注册
OPERATE_RET tuya_nbiot_cmcc_data_send(UINT8_T* data, UINT_T data_len); CMCC 数据发送
OPERATE_RET tuya_nbiot_cmcc_rx_poll(void); CMCC 数据接收查询
OPERATE_RET tuya_nbiot_cmcc_lifetime_update(UINT_T lifetime); CMCC 更新 lifetime
如需直连涂鸦 IoT 云,以下接口也需适配:
OPERATE_RET tal_net_gethostbyname(CONST CHAR_T *domain, TUYA_IP_ADDR_T *addr); 域名解析接口

CTCC

注册部分可使用 AT 指令自行完成。
OPERATE_RET tuya_nbiot_ctcc_lwm2m_register(TAL_NBIOT_LWM2M_REGISTER_T* reg_params); CTCC 注册
OPERATE_RET tuya_nbiot_ctcc_lwm2m_deregister(void); CTCC 去注册
OPERATE_RET tuya_nbiot_ctcc_data_send(UINT8_T* data, UINT_T data_len); CTCC 数据发送
OPERATE_RET tuya_nbiot_ctcc_rx_poll(void); CTCC 数据接收查询
OPERATE_RET tuya_nbiot_ctcc_lifetime_update(UINT_T lifetime); CTCC 更新 lifetime

数据持久化

SDK 在运行过程中,需要持久化储存一些配置信息在你的设备中,需要平台提供持久化的 KV 接口。

int local_storage_set(const char* key, const uint8_t* buffer, size_t length); 写入数据到 KV 系统中
int local_storage_get(const char* key, uint8_t* buffer, size_t* length); 从 KV 系统中读取数据
int local_storage_del(const char* key); 从 KV 系统中删除数据