更新时间:2024-11-20 02:17:38下载pdf
本文以 STM32L431RCT6 与 NX1 AT 固件为例,演示完整的 NB-IoT Link SDK 移植流程。您可以参考本实例,在您自己的 MCU 上快速移植开发。
├── examples(参考例程)
├── include(SDK 头文件,API 接口)
├── src(SDK 源代码)
├── libraries(外部依赖库 CoAP、LwM2M、OneNet、Mbed TLS)
├── middleware(LwM2M、OneNet 中间件)
├── interface(平台必要移植接口,SDK 功能接口)
├── platform(平台移植接口适配)
├── utils(通用工具模块)
├── tuyaFilePaths.cmake
├── CMakeLists.txt
├── PortingGuide.md
├── README.md
└── LICENSE
以 STM32L431 为例,首先创建一个基础工程,包含两个串口初始化等基础配置。
将串口 1 作为日志输出口,请提前配置好串口重定向。
根据 SDK 目录结构说明,请将以下必要文件夹添加到项目中。
请将对应.c文件添加到工程中。
根据提供的 example.c
文件,将必要的接口移植至 STM32 工程的 main.c
中。
根据 linksdk-lwm2m\examples\tuya_nbiot_demo\tuya_nbiot_demo.c
例程,将 SDK 的主状态机循环放在 while(1)
中。为了保证 SDK 运行质量,主循环请不要有较长阻塞延时。
int main(void)
{
/* USER CODE BEGIN 1 */
int ret = OPRT_OK;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
ret = OPRT_OK;
const tuya_iot_config_t config = {
.productkey = TUYA_PRODUCT_KEY,
.software_ver = SOFTWARE_VER,
.imei = TUYA_DEVICE_IMEI,
.uuid = TUYA_DEVICE_UUID,
.authkey = TUYA_DEVICE_AUTHKEY,
.psk = TUYA_DEVICE_PSK,
.imsi = TUYA_DEVICE_IMSI, //International Mobile Subscriber Identity
.is_test_env = false, //env:0(online);1(preview)
.is_wakeup = false, //is woken up from sleep? please invoke tuya_iot_retention_restore() before sleep!
.lifetime = 120, //LIFETIME_DEFAULT,
.link_mode = NBIOT_LINK_ISP,
.power_mode = NBIOT_MODE_PSM,
.apn = "cmnbiot",
.event_handler = user_event_handler_on,
.dp_ack_cb = user_dp_report_notify_callback,
.hb_send_cb = user_heartbeat_send_timeout_callback,
};
/* Initialize Tuya device configuration */
ret = tuya_iot_init(&client, &config);
tuya_file_dl_init(&file_dl_handle, &(const tuya_file_dl_config_t){
.event_cb = user_file_dl_event_cb,
});
/* Start tuya iot task */
tuya_iot_start(&client);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
tuya_iot_yield(&client);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
最后,请将 Heap_Size
空间调至适当大小,例如:
编译无误后,烧录单片机,打开日志,观察运行情况。
如有对应 SDK 日志输出,且可正常打印设备授权信息等,即代表设备运行正常。
根据 SDK 说明文档可知,接口适配,重点需要适配三个接口。
在 linksdk-lwm2m\platform\stm32
下:
network_wrapper.c //网络接口,由于本次使用 MCU+AT 指令开发的模式,仅需适配域名解析接口即可
storage_wrapper.c //数据持久化接口,可移植开源的 KV 组件来实现,例如 easyflash
system_wrapper.c //系统内存与滴答时钟等接口,根据平台自行调整即可
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈