Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread
TCP\IP
WIFI模块_RW007
【24嵌入式设计大赛】基于rt-thread的嵌入式多设备协同控制
发布于 2024-09-15 18:21:01 浏览:647
订阅该版
[tocm] ## 功能介绍 该项目主要基于RT-Thread火星一号开发板验证近距离多设备无线通信,实现的第一种是在同一网络下的tcp/ip通信,将finsh功能增加一个无线模式。 主要功能就是通过RW007 wifi模块 连接wifi,配置成服务器模式,等待客户端连接。 与客户端连接后可以通过与客户端进行通信,进行finsh的功能,同时保留正常串口的功能。 通过三个任务实现以上以上功能。 ## 前言 因为对于现在众多的移动设备实现的多设备协同十分好奇,尤其是华为的多设备协同技术,也称为“超级终端”功能。经过检索了解到是通过软件和硬件的深度集成来实现的。这项技术允许用户将不同的华为设备(如智能手机、平板电脑、笔记本电脑、智慧屏等)连接在一起,实现无缝的任务切换和数据共享。 ## 设计背景 ### 1、硬件开发板介绍:星火一号 ![12f6e0d2d9a1234a37c010ecf7c35ec.jpg](https://oss-club.rt-thread.org/uploads/20240915/c83d6357bd49bcb8e2e09b2e4e9d6a28.jpg.webp) 板载资源: - 复位按键、轻触按键 X4、自锁开关 - 蜂鸣器 - LR1220 RTC 后备电池座 - ST-Link - USB-FS - 麦克风、4 极耳机 - SD 卡座 - 8MB NorFlash - 红外发射、红外接收 - ICM20608 六轴传感器、AP3216 接近传感器、AHT20 温湿度传感器 - RW007 WIFI - 240x240 并行 LCD 支持背光调节 - 19 灯等距全彩 LED - 全彩 LED 外接 - 3.3V 电源扩展、5V 电源扩展 扩展接口: - RS485 接口 - CAN 接口 - 40Pin 树莓派标准扩展无冲撞 IO - Spark-10Pin 创意堆叠平台 - PMOD 接口 x2 支持的 IDE:RT-Thread Studio、MDK。 ### 2、操作系统介绍:RT-Thread RT-Thread是一款开源的实时操作系统(RTOS),它专为嵌入式设备和物联网应用设计,具有小巧、高效、可扩展和易于使用的特点。以下是RT-Thread的一些关键特性和应用场景: RT-Thread的特性: 1. 轻量级和高效性:RT-Thread内核设计精简,资源占用低,适合在资源受限的嵌入式设备上运行,同时支持多任务并发执行,提高系统性能。 2. 实时性:采用抢占式调度策略,确保实时任务能够快速响应。 3. 丰富的组件生态:提供丰富的软件组件,包括文件系统、网络协议栈、图形界面、设备框架等,便于开发者快速构建应用。 4. 良好的兼容性:支持多种硬件平台和编译器,易于移植和开发。 5. 开源免费:遵循GPLv2许可协议,允许用户免费使用和修改源码。 ## 功能点分析 ### 0、嵌入式设备实现多设备协同需要实现多少功能和技术? 在嵌入式系统中实现多设备协同工作,涉及到的关键技术和功能包括: - 1. 通信协议:嵌入式系统通过各种通信协议与其他设备建立连接和信息交换,如串行通信、网络通信、总线通信等 。 - 2. 软件架构和算法设计:嵌入式系统的软件架构通常包括操作系统、应用程序和驱动程序等部分。通过设计合适的算法,系统可以分析其他设备的数据,做出决策,并协调其他设备的行为 。 - 3. 硬件接口和扩展模块:硬件接口使得嵌入式系统能够与其他设备直接连接,实现数据的传输和控制信号的传递。扩展模块提供了更多的功能和接口选项,使得系统能够适应更多种类的设备和应用场景 。 - 4. 操作系统:嵌入式操作系统(RTOS)是实现多设备协同的基础,它负责任务调度、资源管理、通信和同步等 。 - 5. 网络管理:在多设备协同中,网络管理是关键,包括IP地址分配、路由选择、网络通信协议等 。 - 6. 数据同步和共享:多设备协同需要实现数据的同步和共享,确保所有设备都能访问和使用最新的数据 。 - 7. 安全机制:为了保证数据的安全性和系统的稳定性,需要实现安全机制,如数据加密、认证、访问控制等 。 - 8. 用户界面和交互:为了便于用户管理和控制多设备协同,需要提供用户界面和交互设计,如图形用户界面、命令行界面等 。 - 9. 设备发现和识别:多设备协同需要能够快速发现和识别网络中的设备,这通常通过设备名、MAC地址、IP地址等方式实现 。 - 10. 电源管理:在多设备协同中,电源管理是重要的,尤其是在电池供电的设备中,需要优化电源使用,延长设备寿命 。 - 11. 故障检测和处理:多设备协同需要能够检测和处理设备故障,确保系统的稳定性和可靠性 。 - 12. 远程升级和维护:为了保持系统的更新和维护,需要实现远程升级和维护功能,以便在不接触设备的情况下进行软件更新和故障排除 。 通过上述技术和功能的实现,嵌入式系统可以与其他设备协同工作,提供高效、智能的设备间协作,共同完成任务并提升整体性能 。 综上,如果要全部实现这些功能点,所需经验和时间都是巨大的,所以这里先实现以下无线连接,并建立通讯连接即可,暂时不考虑设计通信协议和安全问题,先实现第一步再逐步完善。 ### 1、如何实现多设备之间的无线连接? 蓝牙或者wifi. RW007模块可以实现wifi 连接。 ### 2、wifi实现多设备通信的方式有哪些 1. 客户端-服务器模式: - 这是最常见的模式,其中一个开发板作为服务器,监听特定端口的连接请求;另一个开发板作为客户端,发起连接请求。 - 适合需要持续数据传输或请求-响应类型的应用。 2. 点对点(Peer-to-Peer, P2P)模式: - 在这种模式下,两个开发板都具有平等的角色,它们可以直接进行双向通信,无需服务器。 - 适合需要快速、直接通信的应用,如文件传输、聊天应用等。 3. 广播/组播模式: - 一个开发板可以发送广播或组播消息,其他所有在范围内的设备都可以接收这些消息。 - 适合需要向多个设备发送相同消息的场景,如通知、状态更新等。 4. 网关模式: - 其中一个开发板作为网关,连接到其他网络或设备,另一个开发板通过这个网关进行通信。 - 适合需要通过中间设备进行通信的场景,如智能家居系统中的网关设备。 5. 星型网络: - 多个开发板都连接到一个中心节点,中心节点负责协调通信。 - 适合需要集中控制或管理的应用。 在选择通信模式时,需要考虑以下因素: - 应用需求:通信模式应该满足应用的功能需求。 - 网络环境:考虑无线网络的条件,如信号强度、带宽、延迟等。 - 设备能力:评估开发板的处理能力、内存和网络堆栈。 - 安全性:考虑数据传输的安全性,如加密、认证等。 在实际应用中,可以使用RT-Thread提供的网络框架和协议栈来实现上述通信模式。RT-Thread支持多种网络协议,包括TCP/IP、UDP、HTTP、MQTT等,可以根据需要选择合适的协议来实现复杂的网络通信功能。 ## 软件实现思路 1、比较简单的一种实现连接的方案,在同于网络下建立tcp连接,也就是一个客户端一个服务器。建立连接之后就可以进行通讯了。 2、建立了通讯之后就可以进行信息交互了,参考shell的功能,实现FinSH的功能,在串口的基础上实现无线交互是最好的。 要增加这个就需要实现 输入解析和输出两个关键点。 改写 rt_kprintf()和finsh_getchar() 的功能实现。 先实现rt_kprintf()的修改 增加tcp 通信输出。 ## 实验实现过程 联网过程:可手动,只需修改主函数里面的wifi名字和密码。然后就可以自动连接wifi ![image.png](https://oss-club.rt-thread.org/uploads/20240915/a43e183175589248f8ccb3472e285821.png) 连接成功后会显示ip地址,开发板作为服务器,网络调试助手作为客户端在同一网络下可以进行通讯,需要确认开发板和电脑同时在一个wifi 下连接。 ![image (1).png](https://oss-club.rt-thread.org/uploads/20240915/ced1e2e97edfb975b9e22a11c5885c06.png.webp) ### 源码修改内容 ![image (7).png](https://oss-club.rt-thread.org/uploads/20240915/cbaa7f04a9ae5b98b1b391a2122e4add.png) ![image (5).png](https://oss-club.rt-thread.org/uploads/20240915/38dcacc38aa18ebf8301472c78466ec7.png) ![image (6).png](https://oss-club.rt-thread.org/uploads/20240915/8191f404170da96f9289651daeeeb127.png) ### 分析源码 ![image (3).png](https://oss-club.rt-thread.org/uploads/20240915/a0620086aebe11b1ef30d6463ce918c1.png) ![image (4).png](https://oss-club.rt-thread.org/uploads/20240915/2e05db0fc3ad1a3dfee65b2d486b44a6.png.webp) 这段代码是一个循环,它的作用是从某个设备(如串口)读取数据。如果读取失败,则等待特定的信号量,然后检查设备是否已经改变。如果设备已经改变,则更新设备指针。如果设备是 RT_NULL,则返回错误。这是一个典型的在 RT-Thread 操作系统中读取设备数据的逻辑。 下面是这段代码的逐行解释: 1. while (rt_device_read(device, -1, &ch, 1) != 1): 这是一个 while 循环,它调用 rt_device_read 函数尝试从 device 设备读取 1 个字节的数据到 ch 变量中。-1 参数通常表示读取操作是非阻塞的,即如果设备没有数据可读,函数会立即返回。循环会一直执行,直到读取成功(即 rt_device_read 返回 1)。 2. rt_sem_take(&shell->rx_sem, RT_WAITING_FOREVER): 如果 rt_device_read 没有读取到数据(即设备没有数据可读),则调用 rt_sem_take 函数等待 shell->rx_sem 信号量。RT_WAITING_FOREVER 表示无限期等待,直到信号量可用。 3. if (shell->device != device): 等待信号量后,检查 shell 结构体中的 device 成员是否与当前循环中使用的 device 成员不同。这通常用于检测设备是否在等待期间被更换。 4. device = shell->device: 如果设备已经改变,则更新循环中使用的 device 指针,以便后续的读取操作使用新的设备。 5. if (device == RT_NULL): 检查更新后的 device 是否为 RT_NULL,这通常表示设备不可用或已被注销。 6. return -1;: 如果 device 是 RT_NULL,则返回错误代码 -1。 这段代码通常用于 RT-Thread 的 shell 或命令行界面中,用于从用户输入中读取单个字符。如果读取操作被信号量中断,它会检查设备状态,并在必要时更新设备指针。如果设备不再可用,它会返回错误。这种机制允许动态切换输入设备,例如从串口切换到 USB 设备。 如果想实现 无线传输命令需要改写这一块,或者重新做一个任务,重新做一个任务比较麻烦,直接改写实现一下。 接收处理要保证和串口的不能冲突。 串口有命令行的时候,wifi不能处理 Wifi 是一次性发送过去的。对于串口影响不大的,但是串口是一个字节一个字节的处理的。 设计的知识点 https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/ipc1/ipc1?id=%e4%bf%a1%e5%8f%b7%e9%87%8f ### FinSH 学习总结 基本知识 内核基础 https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/finsh/finsh FinSH 控制台 https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/basic/basic?id=rt-thread-%e8%87%aa%e5%8a%a8%e5%88%9d%e5%a7%8b%e5%8c%96%e6%9c%ba%e5%88%b6 要使用RW007模块实现与电脑的WiFi连接并建立TCP通信,可以按照以下步骤进行: 1. 硬件连接:确保RW007模块正确连接到开发板上,通常需要连接SPI信号线(包括MISO、MOSI、SCK、CS)、中断输入和RESET控制引脚。注意,模块需要3.3V供电。 2. 开发环境准备:准备好Keil MDK、RT-Thread Studio等开发环境,并安装相应的芯片支持包和驱动。 3. 软件配置:使用RT-Thread的env工具进行工程配置,包括SPI总线的配置、RW007软件包的配置,以及WiFi框架的启用。 4. SPI配置:在RT-Thread的env工具中,配置SPI1,并确保选择了正确的SPI模式和速率。速率建议设置在3-6MHz之间,以确保稳定性。 5. RW007软件包配置:在env工具中,进入RT-Thread online packages -> IoT - internet of things -> Wi-Fi,选择并配置rw007: SPI WIFI rw007 driver软件包。 6. WiFi框架启用:在env工具中,进入RT-Thread Components -> Device Drivers -> Using WiFi,勾选Using Wi-Fi framework。 7. 编译下载:配置完成后,编译工程并下载到开发板上。 8. 命令行控制:使用串口工具(如Xshell)连接开发板,通过命令行控制RW007进行WiFi连接和TCP通信。可以使用wifi scan命令扫描周围的WiFi网络,然后使用wifi join ssid passwd命令连接到指定的WiFi网络。 9. TCP通信:连接到WiFi网络后,可以使用RT-Thread提供的网络API进行TCP通信,如创建socket、连接服务器等。 如果在配置过程中遇到问题,可以参考搜索结果中提供的信息,特别是关于SPI配置、RW007软件包配置和WiFi框架启用的详细步骤 。如果RW007初始化失败,可能是因为软件版本与固件不匹配,需要选择与固件匹配的软件版 不想配置可以直接用 官方例程来修改应用即可。05_iot_http_client。我也是在这个工程的基础上进行修改的。 任务设计介绍: ## 设计任务实现 发送功能最容易实现,稍微复杂一点的是,把客户端发送过来的数据交给FINSH处理,需要分析正常串口的操作如何进行的,然后实现一样的效果。还要保证串口和wifi同时都保留。 最终实现的方案,命令行阶段会存在问题,字母不能实时显示,只有点击enter回车才能显示并处理, *任务A : 监控出串口接收 ch = (int)finsh_getchar();自动阻塞, *任务B : 监控wifi数据接收, tcp_server *任务C :接收任务A、任务B 接收到的数据。把数据传递给Finsh *任务关系:任务C自身能够根据数据的有无进行阻塞线程, - 任务AB要保持互斥。 数据传输 *A->C: tcp_server最好是一次发送完 监控到回车就发送过去。 *B->C:监控到结尾 加一个回车发送过去, *C 自己进行拆解 一次返回一个,发送完就阻塞 *线程之间通讯用邮箱吧 AB 通过邮箱去发送命令信息给 C 邮箱信息格式 任务 地址 长度 *要给 finsh_thread_entry() 的 ch = (int)finsh_getchar(); 替换新的接口。这个接口可以阻塞住 ![image (8).png](https://oss-club.rt-thread.org/uploads/20240915/03fcbd141674f88e7aa06f6473450d34.png.webp) ## 源码仓库 https://gitee.com/binchenqupengli391binzhouuniversity/rt-thread_wirelessfinsh 飞书记录 https://bcn8it6q0da7.feishu.cn/docx/ESrXdFXHcoVLOYxAKE9cyp1cneh?from=from_copylink ## 介绍视频
3
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
周乾龙
这家伙很懒,什么也没写!
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
RT-THREAD在STM32H747平台上移植lwip
2
正点原子miniSTM32开发板读写sdcard
3
反馈rtt串口驱动对低功耗串口lpuart1不兼容的问题
4
Keil MDK 移植 RT-Thread Nano
5
RT1061/1052 带 RTT + LWIP和LPSPI,有什么坑要注意吗?
6
RT thread HID 如何收发数据
7
求一份基于RTT系统封装好的STM32F1系列的FLASH操作程序
8
RT-Thread修改项目名称之后不能下载
9
rt-studio编译c++
10
有木有移植rt-thread(nano)到riscv 32位MCU上
推荐文章
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
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部