stm32结合WIFI模块自组局域网

本文分享了ESP8266在自组局域网应用中的实践经验,对比了WIFI模块与蓝牙模块的配置差异,强调了ESP8266在局域网组建与数据传输方面的优势。同时,介绍了LORA模块与ESP8266在自组网能力上的区别,详细阐述了如何利用ESP8266搭建局域网并实现数据上传至服务器的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,本人在校小白一个,本章节记录一个esp8266比较少见的应用场景,自组局域网。

硬件设施:STM32F103C8T6

主要模块:WIFI模块以及自己画的PCB板(专为此设计)

先写下一下自己对LORA,WIFI模块,蓝牙模块的使用心得吧。

一、WIFI模块和蓝牙模块的配置方式相差不多,但是又存在一些差距。

都是通过AT指令进行配置,蓝牙只用配置一次,然后上电即可自动配对。在配对成功之后,收发数据就是串口相关的内容了。操作简单。WIFI模块也可以点对点通信,不过,这里的P2P就不是单单2个WIFI模块这么简单。将一个WIFI模块设置为热点模式,其余设置为客户端模式。客户端发送数据,热点端都可以接收到并且标注是某个模块传输过来的数据。热点端可以发送数据(提前指定发送数据长度,以及某一个客户端)

蓝牙不能组建局域网,然而ESP8266可以组建局域网,同时肩负网关的角色。故WIFI模块开发难度》蓝牙开发难度

二、LORA 与ESP8266WIFI 模块

二者都可自组网,都是通过AT指令进行配置。WIFI模块自组网,其节点之间传输距离太短,LORA模块自组网节点与网关之间的传输距离可达到2KM以上。

当然,lora的使用难度要比WIFI模块高一些。

话不多说,先上干货。

如何组建局域网:一个扮演主机,多个扮演从机。(一个设置为热点模式,其余设置为客户端模式)逻辑图如下

主节点需要对应的硬件环境来支撑其信息的传输,比如,使用C8T6作为硬件环境,同时,搭配数据采集模块,实现芯片采集数据,将数据通过节点发送给网关,网关上传至网络的全过程。

如何设置呢?

主机模式:

从机模式:

WIFI模块与服务器通信,这一部分在上一篇博客中有过详细讲解。

组建局域网的核心,一共有2个:(1)模块与模块之间数据传输(2)某一个模块从将数据上传至服务器(从热点模式转变为客户端模式)

WIFI模块点对点传输,有效传输距离在10到20米之间,感觉有些鸡肋,不过不同的项目,选择最适合的模块也是不一样的。

I傲视模块时,建议自己有一个调试的PCB板子,多引出串口,多引出电源,多引出外设引脚。会大大缩短用系统开发时间。工具,开发用的工具一定要齐全,

 

许久没有更新博客了,都快忘记如何写博客了。在最近几个月里,经手了几个比较有难度的项目,总结有一点:项目中最难的点一定是数据处理一个数据传输。

明晚找个时间更一波有人公司的LORA芯片调试,以及自定义通信协议。

STM32组网无线通信通常是通过嵌入式Wi-Fi或蓝牙模块实现的,例如WiFi模块如ESP8266、ESP32STM32的BlueNRG系列。以下是基本步骤和代码概览: 1. **硬件准备**: - 需要一个支持TCP/IP协议的WiFi模块,连接到STM32作为MCU。 - 确保供电、GPIO配置以及必要的天线连接。 2. **软件库安装**: - 使用STM32CubeMX配置固件并生成项目,选择合适的HAL库(如FreeRTOS)和WiFi驱动(如lwIP或mbedTLS)。 3. **初始化网络连接**: ```c #include "stm32f1xx_hal.h" #include "lwip stack.h" void wifi_init(void) { // 初始化WiFi模组,设置SSID和密码 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); // 等待连接 } } ``` 4. **建立TCP连接**: ```c void connect_server(char* server_ip, uint16_t port) { struct ip_addr server_ip_addr; ipaddr_aton(server_ip, &server_ip_addr); struct sockaddr_in server_addr; bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(port); server_addr.sin_addr = server_ip_addr; if (tcp_connect(&sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { // 错误处理 } } ``` 5. **发送和接收数据**: ```c void send_data(char* data) { ssize_t sent = tcp_send(sock, data, strlen(data)); if (sent < 0) { // 数据发送失败处理 } } void receive_data(char* buffer, uint16_t max_len) { ssize_t received = tcp_recv(sock, buffer, max_len); if (received > 0) { // 数据接收成功,处理接收到的数据 } else { // 数据接收错误处理 } } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值