野火F103VET6指南者自带ESP8266模块的使用(一)(持续更新)

第一篇:AT指令的使用&&用PC通过(ESP8266)向网络助手发送数据

一、电平转换
相信做过串口通信的小伙伴都一定用过CH340电平转换(如下图,野火自带配套软件)
提醒诸君:USB转串口 = USB转TTL,(不要像我傻不拉几的以为指南者不带串口转TTL,又买了个转TTL线)。安装下图驱动,若端口出现第三幅图模样则安装成功(USB转TTL)

(备注:芯片的引脚TXD、RXD是TTL电平的引脚配置成串口做串口用,所以“USB转串口”就是TTL的电平的串口 = “USB转TTL”)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
***附:为什么要进行转换?***(诸君不愿看可忽略)

(转自 CSDN 博主 csshuke)
因为单片机通信接口的电平逻辑和PC机通信接口的电平逻辑不同。

有什么不同?

PC机上的通信接口有USB接口,相应电平逻辑遵照USB原则;

而我们的单片机上的串行通信通过单片机的RXD、TXD、VCC、GND四个引脚,相应电平逻辑遵照TTL原则。

当然,新手小白买的学习板上肯定都已经集成了类似PL2303、CP2102之类的USB转TTL芯片,相应接口也变成了USB接口;

转换的目的是把电平转换到双方都能识别,下面分类举例:

情况1:PC机USB口与不带电平转换芯片的单片机通信(Arduino可能是这样)
方法:外购USB转TTL模块,如下图所示。该模块一端接入PC机的USB接口,另一端有TXD、RXD、GND、5V、3.3V五个引脚,分别与单片机的RXD、TXD、GND、5V引脚相连,对于采用3.3V供电的单片机则把5V改为3.3V即可。该模块核心就是一块PL2303、CP2102芯片进行USB与TTL电平的转换。
在这里插入图片描述

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

二、PC端通过ESP8266向网络调试助手发送数据

情况2:PC机USB口与集成了USB转TTL芯片的单片机通信接下来我们讲解指南者
【 AT指令进行WIFI透传到网络助手】
实验器材:两根双母头杜邦线、USB转串口驱动-CH340(软件)、连接USB转串口和PC端的USB线

备注:USB转串口驱动-CH340 是 USB 转 UART 驱动,它把 USB 协议转换
成 TTL 协议,使得电脑能直接用 USB 线与模块通讯,但在使用前,需要给电脑安装相应
的 驱 动 。

方法:①安装CH340驱动并用USB线连接USB转串口和PC(实现USB转TTL)
②(在进行USART1——WiFi串口通讯时,需要将USART3的UTX接USART1的RXD,USART3的URX接相应的TXD)

      备注“因为ESP8266的发送端是UTX,接收端是URX”,其他不需要外接,因为指南者对于VCC,GND,CH-PD,RST已经内部集成,如下原理图。

在这里插入图片描述

③接好之后, 检测模块是否正常(前提要先在单片机里下载野火官方例程里的WiFi透传,不然发什么都没反应)
在这里插入图片描述
这样只是借用程序里面的引脚控制通过USART3给ESP8266供电和使能

在确保以上操作完成后后, 打 开 “ 网络调试助手
在这里插入图片描述
在这里插入图片描述
刚开始PC可能会接收到一串乱码(为啥会接收到一串乱码???乱码来自哪里?我明明把跳线帽拔掉了,怎么B10还能向U3发送数据?把程序下载到单片机是为了给ESP8266供电和使能,我要是把跳线帽拔掉,还怎么持续发送和使能? 下面的按按键U3将数据发送给ESP8266“+++”就是个例子,发送不了,跳线帽被拔掉无法通信 )

在“字符串输入框”输入“AT”,再按回车键,最后点击“发送”,如果上方接收窗口有返
回“OK”,那说明模块正常,如图 1-3 所示;如果没有返回“OK”,可以多次尝试,或
检查前面步骤是否正常,如若仍无该返回,模块可能存在异常
在这里插入图片描述
接下来我们可以根据AT资料库对数据透传
具体是通过PC配置ESP8266模块,PC发送数据至U3(ESP8266),ESP8266传递至网络调试助手,中间数据不会改变,实现透明传输(好比拿一束光穿过玻璃发送到外面,而光在通过玻璃传输过程中并没有改变自身任何性质)

介绍如下:
一、普通传输模式,设置发送数据的⻓度
1、单连接TCP Client
2、固定远端的UDP传输
3、远端可变的UDP传输

二、
4、TCP Client 单连接透传
5、UDP透传

1、单连接 TCP Client(例 ESP8266 作为 TCP Client 建⽴单连接通信)。
(若数据只有发送,无接收,请检查你有没有为ESP8266供电和使能?)《来源于野火ESP8266官方例程,不方便可问我要QQ:1900987816》
在这里插入图片描述
在这里讲解一下为啥要查询ESP8266设备:
我们做的是单连接 TCP Client(即 ESP8266 作为 TCP Client 与PC的TCP Server建⽴单连接通信)。
在目标主机上我们输入的是ESP8266的IP和自定义的端口(端口有超过5000个,自己随心定义哪个端口发送即可)
上面我们已经用PC创建了TCP Server(且输入完IP,端口),同时也用ESP8266连接了服务器,此时即为端口之间的传递数据。

2、普通UDP协议传输
在这里插入图片描述
后文将基于前面4个步骤,讲解固定远端和远端可变的UDP传输。
在这里插入图片描述

在这里插入图片描述

二、ESP8266 AT 默认仅在 TCP client 单连接或 UDP 固定定远端传输模式时,⽀持透传。

备注知识点
WiFi模块的两种工作模式:透明传输、串口指令
1、透明传输
此模式下,所有需要收发的数据都被在串口与WiFi接口之间做透明传输。

2、串口指令
此模式下,用户可以将串口的数据发往不同的服务器地址,此模式可以用UDP或是TCP Client向服务器发送数据

在这里插入图片描述
在这里插入图片描述
遇到问题:
1、键盘发送“+++”,不被认为是连续的(无法退出透传发送数据),仍然当数据发送。如何用串口工具一次性发送?

2、UDP透传为啥一到发送CIPSEND后,发送啥都是发送成功,接收0?

3、那个TCP Client 总是连接失败是咋回事?

(此篇目的是为了实现AT指令配置ESP8266)
目的是让你熟悉AT资料指令 野火官方例程里已经把AT资料封装成个函数,也就不用自己配置。

  • 12
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是使用野火SYM32F103VET6指南者开发板和4针OLED屏幕编写的简单万年历代码: ``` #include "stm32f10x.h" #include "oled.h" #define YEAR 2021 // 当前年份 #define MONTH 1 // 当前月份 #define DAY 1 // 当前日期 uint8_t month_day[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; // 每个月份的天数 void delay(uint32_t count) { uint32_t i; for(i = 0; i < count; i++); } void OLED_Show_Year(uint16_t year) { OLED_ShowString(0, 0, "Year: "); OLED_ShowNum(48, 0, year, 4, 16); } void OLED_Show_Month(uint8_t month) { OLED_ShowString(0, 16, "Month: "); OLED_ShowNum(48, 16, month, 2, 16); } void OLED_Show_Day(uint8_t day) { OLED_ShowString(0, 32, "Day: "); OLED_ShowNum(48, 32, day, 2, 16); } void OLED_Show_Week(uint8_t week) { OLED_ShowString(0, 48, "Week: "); switch(week) { case 0: OLED_ShowString(48, 48, "Sunday"); break; case 1: OLED_ShowString(48, 48, "Monday"); break; case 2: OLED_ShowString(48, 48, "Tuesday"); break; case 3: OLED_ShowString(48, 48, "Wednesday"); break; case 4: OLED_ShowString(48, 48, "Thursday"); break; case 5: OLED_ShowString(48, 48, "Friday"); break; case 6: OLED_ShowString(48, 48, "Saturday"); break; default: break; } } void OLED_Show_Calendar(uint16_t year, uint8_t month, uint8_t day) { uint8_t week = 0; uint16_t days = 0; // 计算该年份是否为闰年 if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { month_day[1] = 29; // 闰年2月份为29天 } else { month_day[1] = 28; // 平年2月份为28天 } // 计算该日期是该年份中的第几天 for(uint8_t i = 0; i < month - 1; i++) { days += month_day[i]; } days += day; // 计算该日期是星期几 week = (days + 5) % 7; OLED_Show_Year(year); OLED_Show_Month(month); OLED_Show_Day(day); OLED_Show_Week(week); } int main(void) { OLED_Init(); // 初始化OLED屏幕 OLED_ShowString(0, 0, "Hello, World!"); delay(1000000); OLED_Clear(); OLED_Show_Calendar(YEAR, MONTH, DAY); while(1); return 0; } ``` 在该代码中,我们定义了当前的年份、月份和日期,并且使用了一个数组来存储每个月份的天数。然后我们使用了一些函数来显示年份、月份、日期和星期几,最后在主函数中调用了这些函数来显示万年历。你可以根据需要对代码进行修改以适应你的具体需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值