Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
英飞凌Infineon
【RTTxIFX大赛】基于英飞凌的智能家居系统-浅谈我对rt-thread的理解
发布于 2023-07-15 23:06:32 浏览:864
订阅该版
[tocm] ## 一、事情起由-缘不知何起 忘了是哪一天晚上下班回家打开RT-Thread公众号,发现有一个活动,当时RTT的活动详情页的资料比较少,果断去rtt的gitee仓库看看都已经适配了哪些驱动,找到英飞凌的bsp,根据活动提示的evaluation关键词找到对应的板子,在README找到英飞凌的芯片型号和规格书,根据以上收罗到的三点内容,可以确定可以做啥。之前都没有用rtthread开发过东西,想着开发板是可以免费提供的,还有大咖带着,不懂可以问,怎么想都是稳赚的,果断报名,等名单公布的时候意外的发现自己是第一个报名的。开发过程中,有一些小感悟,在此做一个分享,如果您也疑惑于如何用rtthread去开发一个项目,可以小读一下,我分享技术的同时,也是分享我的喜悦,愿您也如此,看得开心,如果您开心了,别忘了点赞,如果您也有想说的,可以在评论区,我们乘着这个夏天,畅所欲言,在文字里一起感受英飞凌和RT-Thread给我们带来的开发享受。 ## 二、开发过程-聊聊软件包的那些事 ### 2.1 项目介绍 系统的主控是英飞凌的CY8C624ABZI,Cortex-M4主频 150MHz,Cortex-M0主频 100MHz,2MB Flash 和 1MB SRAM,运行RT-Thread操作系统,负责智能家居系统的控制。系统由驱动模块、蜂窝通信模块、天气时钟模块、腾讯云远程控制模块、界面显示模块组成。 - 驱动模块。驱动模块负责驱动ssd1306、ec800e,为上层的智能家居应用提供操作硬件的接口,在裸机中,驱动的编写根据不同的芯片提供的标准库或者更高级些的hal库去实现驱动,而在rt-thread中,则是使用设备的posix接口去实现驱动,常用的外设已经有开发者编写好并提交软件包,我们可以通过软件包的方式不写一行代码,很方便的通过配置的方式去驱动一个外设。 - 蜂窝通信模块。网络采用的是蜂窝通信,使用移远的EC800E作为网卡,负责将终端的数据上传上传到云端或者从云端接收控制消息。EC800E是一款低功耗的CAT1模组,得益于创新的PSM低功耗模式,功耗介于传统cat1和nb之间,是考虑功耗应用的不错选择,另外,成本也是cat1品类中最低的。使用蜂窝通信的好处是不需要配网,不需要搭建网络。在rtt配置使能ec200x后sal自动勾选,配置实际需要使用的串口号即可实现网络通信。 - 天气时钟模块。天气时钟模块负责获取天气数据和ntp时间,本模块通过webclient软件包以以http协议从心知天气的服务器获取天气数据,在rtt配置使能ntp自动从ntp服务器同步时间。 - 腾讯云远程控制模块。该模块负责从腾讯云获取控制消息,对继电器进行控制。通过qcloud的csdk提供的下行数据处理接口对继电器进行控制。 - 界面显示模块。该模块负责天气和时间的显示,通过使用u8g2软件包提供的接口绘制显示界面。 使用到的软件包: u8g2 cJSON mbedtls tencent-iot-csdk at_device netutils webclient ### 2.2 设备驱动-英飞凌CY8C624ABZI驱动 rt-thead的设备驱动框架为驱动提供了统一的需要实现的接口,不同的MCU平台根据接口的规定提供驱动数据的传输接口,外设的控制即可以由操作系统进行管理,基于rtthread的不同MCU的项目代码可以复用。CY8C624ABZI的驱动在libraries\HAL_Drivers文件夹下。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230715/7d9b46f587cb2eb94e8644701a1f0c1a.png.webp) ### 2.3 蜂窝通信-移远EC800E ec800e是一款cat1通信模组,通过AT命令的方式提供网络服务,在at规范中叫做at server,rtthread实现at client,并基于at tcp为socket抽象层(sal)提供at socket。rtthread通过uart设备访问ec800e。在rtt中配置使能ec200x即可使用网络服务。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230715/8d1b0c13aa98740a2351a4da8e712913.png) ### 2.4 天气时钟-心知天气 心知天气提供了api,需要注册一个账号,下面的url中的xxx是自己的key,%s是城市名。 ```c "https://api.seniverse.com/v3/weather/now.json?key=xxx&location=%s" ``` 配置好webclient软件包后通过接口从服务器获取给json格式的天气数据。 ```c if ((resp_status = webclient_get(session, weather_url)) != 200) { goto __exit; } buffer = rt_calloc(1, GET_RESP_BUFSZ); if (buffer == RT_NULL) { rt_kprintf("No memory for data receive buffer!\n"); goto __exit; } content_length = webclient_content_length_get(session); if (content_length < 0) { do { bytes_read = webclient_read(session, buffer, GET_RESP_BUFSZ); if (bytes_read <= 0) { break; } } while (1); } else { do { bytes_read = webclient_read(session, buffer, content_length - content_pos > GET_RESP_BUFSZ ? GET_RESP_BUFSZ : content_length - content_pos); if (bytes_read <= 0) { break; } content_pos += bytes_read; } while (content_pos < content_length); } rt_kprintf("buffer = %s\n", buffer); cjson_now_weather_parse(buffer, NULL); ``` 通过cjson_now_weather_parse解析出天气数据。 ```c static int cjson_now_weather_parse(char *JSON, void *result) { cJSON *json,*arrayItem,*object,*subobject,*item; //printf("Receive now data:%s\r\n",JSON); json = cJSON_Parse(JSON); if(json == NULL) { printf("Error before: [%s]\r\n",cJSON_GetErrorPtr()); return 1; } else { if((arrayItem = cJSON_GetObjectItem(json,"results")) != NULL); { int size = cJSON_GetArraySize(arrayItem); // printf("cJSON_GetArraySize: size=%d\n",size); if((object = cJSON_GetArrayItem(arrayItem,0)) != NULL) { printf("--------------------------------Now Weather Data Begin------------------------------\r\n"); if((subobject = cJSON_GetObjectItem(object,"location")) != NULL) { printf("---------------------------------subobject1-------------------------------\r\n"); if((item = cJSON_GetObjectItem(subobject,"id")) != NULL) { printf("cJSON_GetObjectItem: %s:%s\r\n",item->string,item->valuestring); } if((item = cJSON_GetObjectItem(subobject,"name")) != NULL) { printf("cJSON_GetObjectItem: %s:%s\r\n",item->string,item->valuestring); } if((item = cJSON_GetObjectItem(subobject,"country")) != NULL) { printf("cJSON_GetObjectItem: %s:%s\r\n",item->string,item->valuestring); } if((item = cJSON_GetObjectItem(subobject,"path")) != NULL) { printf("cJSON_GetObjectItem: %s:%s\r\n",item->string,item->valuestring); } if((item = cJSON_GetObjectItem(subobject,"timezone")) != NULL) { printf("cJSON_GetObjectItem: %s:%s\r\n",item->string,item->valuestring); } if((item = cJSON_GetObjectItem(subobject,"timezone_offset")) != NULL) { printf("cJSON_GetObjectItem: %s:%s\r\n",item->string,item->valuestring); } } if((subobject = cJSON_GetObjectItem(object,"now")) != NULL) { printf("---------------------------------subobject2-------------------------------\r\n"); if((item = cJSON_GetObjectItem(subobject,"text")) != NULL) { printf("cJSON_GetObjectItem: %s:%s\r\n",item->string,item->valuestring); strcpy(weather_weather, item->valuestring); } if((item = cJSON_GetObjectItem(subobject,"code")) != NULL) { printf("cJSON_GetObjectItem: %s:%s\r\n",item->string, item->valuestring); //strcpy(weather_code, item->valuestring); } if((item = cJSON_GetObjectItem(subobject,"temperature")) != NULL) { printf("cJSON_GetObjectItem: %s:%s\r\n",item->string, item->valuestring); strcpy(weather_temprature, item->valuestring); } } if((subobject = cJSON_GetObjectItem(object,"last_update")) != NULL) { printf("---------------------------------subobject3-------------------------------\r\n"); printf("cJSON_GetObjectItem: %s:%s\r\n",subobject->string,subobject->valuestring); } printf("--------------------------------Now Weather Data End--------------------------------\r\n"); } } } cJSON_Delete(json); return 0; } ``` ### 2.5 物联网平台-腾讯云 rtthread适配好了腾讯云的csdk,配置腾讯云的软件包即可使用。在腾讯云创建好设备后可以获得设备ID和密钥,在配置软件包的的时候填上即可。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230715/b626c68cdeb6732a2e4d7c24037a9621.png) 腾讯云为了管理终端的数据,设计出了数据模板协议,数据模板以json的键值对的方式管理属性。常用的设备腾讯云已经定义好了属性,使用模板即可。这样做的好处是腾讯云平台不需要考虑终端的差异,在这套协议下,设备的本质是属性的集合,平台之上的应用(如腾讯连连)可以直接访问数据,方便终端的上层交互应用开发。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230715/20392d624cc84e976930be1dc35112fc.png.webp) ### 2.6 界面显示-u8g2 rtthread通过pin设备适配好u8g2,以模拟i2c的方式与ssd1306通信,驱动逻辑由u8g2提供。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230715/a1c910ef7847755f8785170db7d03062.png) ### 2.7 系统测试 ![screenshot_e7df261f764c157de9838c6d289d929.jpg](https://oss-club.rt-thread.org/uploads/20230715/ec775e4ec5e692524713b11e70fdcd75.jpg.webp) ### 2.8 视频和gitee 【基于英飞凌和rtthread的智能家居系统】 https://www.bilibili.com/video/BV1JV4y1b7uN/?share_source=copy_web&vd_source=0a2158ebe76a7be749b94e5ac51c9821 https://gitee.com/qinchang199/infenion_with_rtthread_smart_home ## 三、浅谈我对rt-thread的理解-岛上山楼凭此意,与君共饮一杯醉 有幸能参与这样一个有意义的活动,感谢英飞凌和RT-Thread提供的平台,结识一群志同道合的朋友,英飞凌资源很丰富,flash和ram都可以放下很多软件包,之前跑lvgl也不需要做裁剪,rtthread对英飞凌的支持很全面,不需要关心soc6的驱动,在开发中只需要关注应用代码。已有的基于rtthread的项目可以直接迁移到新的平台。驱动和应用分离,方便多平台的适配。特别的,sal套接字抽象层隔离具体网络的实现,配置好at devcice即可实现设备联网。 最后,再次感谢英飞凌和rtthread提供的学习机会,也希望有更多这样的活动,聚集一些开发者做些有意义的活动。祝英飞凌和rtthread越做越好。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
happycode999
这家伙很懒,什么也没写!
文章
28
回答
6
被采纳
0
关注TA
发私信
相关文章
1
RT-Thread支持英飞凌芯片吗?
2
RT-Thread系统在英飞凌TC364芯片上仅能在 Cpu 0 运行
3
请问版主RTT有没有移植到infineon的XC2000系列MCU上
4
关于RTT对于infineon 的Aurix系列的支持。
5
RT-AK使用,插件如何构建
6
PSOC6 BSP工程导入不成功
7
PSoCTM 62 初始化串口后进入休眠,功耗增加。
8
英飞凌PSoC 6 RTT开发板普通工程编译完ROM使用量就达到了1101KB
9
2023开发者大会动手实验环境搭建
10
英飞凌CYW43012 Wi-Fi 功能提示MAC地址获取错误
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
11
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
rv666
9
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部