Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
英飞凌Infineon
英飞凌WiFi+蓝牙二合一模块CYW43012试用-无线调试抄表应用
发布于 2024-02-14 00:13:30 浏览:466
订阅该版
[TOC] 工程: [cyw43012_wifi_demo.7z](https://club.rt-thread.org/file_download/885e1a78f24af7a9) # 一.蓝牙测试 ## 1.1开发环境准备 如下拨码开关接1V8,DAP接电脑。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240213/6154840bf9b78c693a8bb6196ca7106f.png.webp) 安装最新版RT-Thread Studio 安装BSP ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240213/a137ed78d5ff21d399f789ccbc620a87.png.webp) 安装Openocd ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240213/c6491b91549ac746c7b73145af18aea0.png.webp) 文件->新建->Rt-Thread项目 创建示例工程 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240213/ce992f2d04c3308e4d84714dbc2fc380.png.webp) 右键点击工程”cyw43012_ble_demo”->打开ENV终端 menuconfig 使能驱动并配置为最新版 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/8a5fefed2b2c4e6b407e2932c2aa4b37.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/23f682c4b6f63315849c22540b0cc9cc.png.webp) 更新包 pkgs --update 项目->全部构建 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/f20982ec2e8ffeac77bd5df5436bdb52.png.webp) 点击甲壳虫图标,下载运行 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/c709f1fb926f2a487677d9291c373b9c.png.webp) 连接串口115200-8-n-1 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/4a0f08a3df0e6712ad974bf89cdb2fc8.png.webp) ## 1.2测试 PC上使用水木行蓝牙透传调试助手工具进行连接测试 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/546b405f1b45b8714701b0f4c709c2bc.png.webp) 手机上使用BLE调试助手工具测试 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/678e53a904f9343471938a26c191baa0.png.webp) # 二.WIFI测试 文件->新建->Rt-Thread项目 创建示例工程 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/b6a230aea10aa0a43e65fc24e3c83297.png.webp) 右键点击工程”cyw43012_ble_demo”->打开ENV终端 menuconfig 使能驱动并配置为最新版 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/3a3e436248ee5a4e1ce0723801715368.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/9678d0fbab98c36974f933072bd36a6d.png.webp) 项目->全部构建 下载运行 连接wifi wifi join 用户名 密码 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/4a5e274f893b005f65431c39c2ed121b.png.webp) # 三.无线调试应用 基于以上蓝牙和wifi的通讯,可以实现无线调试替代串口有线调试。 ## 3.1 WIFI UDP收发测试 先实现UDP收发,实现通讯链路,使用wifi无线透传进行调试 ```c #include
#include
#include
#include
#include
#include
/* 使用BSD socket,需要包含socket.h头文件 */ #include
#include
#define BUFSZ 1024 static void wifi_thread(void* parameter); rt_thread_t wifi_thread_h; int wifi_itf_init(const char* ssid, const char* key) { uint8_t mac[6]={11,22,33,44,55,66}; struct rt_wlan_info info; rt_wlan_set_mac(mac); rt_wlan_connect(ssid, key); //rt_wlan_get_info(&info); wifi_thread_h = rt_thread_create("wifi_thread", wifi_thread, 0, 1024, 10, 2); rt_thread_startup(wifi_thread_h); return 0; } static void wifi_thread(void* parameter) { int sock; int bytes_read; char *recv_data; socklen_t addr_len; struct sockaddr_in server_addr, client_addr; /* 分配接收用的数据缓冲 */ recv_data = rt_malloc(BUFSZ); if (recv_data == RT_NULL) { /* 分配内存失败,返回 */ rt_kprintf("No memory\n"); return; } /* 创建一个socket,类型是SOCK_DGRAM,UDP类型 */ if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { rt_kprintf("Socket error\n"); /* 释放接收用的数据缓冲 */ rt_free(recv_data); return; } /* 初始化服务端地址 */ server_addr.sin_family = AF_INET; server_addr.sin_port = htons(5000); server_addr.sin_addr.s_addr = INADDR_ANY; rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero)); /* 绑定socket到服务端地址 */ if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) { /* 绑定地址失败 */ rt_kprintf("Bind error\n"); /* 释放接收用的数据缓冲 */ rt_free(recv_data); return; } addr_len = sizeof(struct sockaddr); rt_kprintf("UDPServer Waiting for client on port 5000...\n"); while (1) { /* 从sock中收取最大BUFSZ - 1字节数据 */ bytes_read = recvfrom(sock, recv_data, BUFSZ - 1, 0, (struct sockaddr *)&client_addr, &addr_len); /* UDP不同于TCP,它基本不会出现收取的数据失败的情况,除非设置了超时等待 */ recv_data[bytes_read] = '\0'; /* 把末端清零 */ /* 输出接收的数据 */ sendto(sock, recv_data, bytes_read, 0, (struct sockaddr *)&client_addr, sizeof(struct sockaddr)); } return; } ``` 测试结果如下,收到原样返回 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/909be620becf308e3129134bba780ffd.png.webp) ## 3.2 基于环形缓冲区实现wifi的读写接口 为了方便应用层调用,需要实现更方便使用的WIFI读写接口。 这里基于FIFO实现,wifi线程接收到数据后存储到FIFO用户读API只需要查询FIFO读即可,而用户API发送则只需要写入FIFO,wifi线程再从fifo中读出发送。需要一个读和一个写fifo。 FIFO实现参考《https://mp.weixin.qq.com/s/MvL9eDesyuxD60fnbl1nag超级精简系列之十三:超级精简的循环FIFO,C实现》 代码见wifi_itf.c,wifi_itf.h 测试代码如下,PC端发送数据,板子收到原样返回。 ```c uint32_t len = wifi_read(buffer, sizeof(buffer)); if(len > 0) { wifi_write(buffer, len); } ``` ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/909be620becf308e3129134bba780ffd.png.webp) ## 3.3无线 SHELL调试 以上实现了wifi的收发,我们只需要按照文章《https://mp.weixin.qq.com/s/XLmbJn0SKoDT1aLdxHDrbg一个超级精简高可移植的shell命令行C实现》移植shell,就可以和有线串口一样使用shell调试。 详见代码shell.c/h;shell_func.c/h 测试代码如下 ```c shell_set_itf(wifi_read, wifi_write, (shell_cmd_cfg*)g_shell_cmd_list_ast, 1); for (;;) { shell_exec(); rt_thread_mdelay(5); } ``` ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/1d4bcffa2ce210b8ab6caf2c1867cc89.png.webp) # 四.无线抄表应用 以上实现了wifi收发,以及shell调试,基于此可以实现不同应用。比如对于无线抄表应用可以使用wifi透传替换原来的485等链路,移植比较简单。也可以基于shell添加命令,试用命令行交互,这里演示第二种方式。 shell_func.c中g_shell_cmd_list_ast添加命令行 { (uint8_t*)"getvol", getvolfunc, (uint8_t*)"getvol"}, { (uint8_t*)"getcur", getcurfunc, (uint8_t*)"getcur}, 声明函数 static void getvolfunc(uint8_t* param); static void getcurfunc(uint8_t* param); 实现函数 void getvolfunc(uint8_t* param) { shell_putstring("220V\r\n"); } void getcurfunc(uint8_t* param) { shell_putstring("10A\r\n"); } 测试 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/146ccd3e8e483a322c771778dbac016a.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240214/27f13668db55d829fb6120eda3bb06f9.png.webp) # 五.总结 得益于cyw43012模块可以快速扩展蓝牙+Wifi无线能力,得益于rt-thread的驱动适配,可以快速实现蓝牙和wifi的通讯,只需关注具体的应用即可。以上进行了蓝牙和wifi的通讯测试,基于WIFI快速实现了无线调试和抄表的应用体验。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
qinyunti
这家伙很懒,什么也没写!
文章
30
回答
1
被采纳
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
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
812
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部