esp8266波特率怎么设置?使用总结

RF/无线

1827人已加入

描述

  波特率的概念

  模拟线路信号的速率,以波形每秒的振荡数来衡量。如果数据不压缩,波特率等于每秒钟传输的数据位数,如果数据进行了压缩,那么每秒钟传输的数据位数通常大于调制速率,使得交换使用波特和比特/秒偶尔会产生错误。

  在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。波特率是指数据信号对载波的调制速率,它用单位时间内载波调制状态改变的次数来表示(也就是每秒调制的符号数),其单位是波特(Baud,symbol/s)。波特率是传输通道频宽的指标。

  每秒钟通过信道传输的信息量称为位传输速率,也就是每秒钟传送的二进制位数,简称比特率。比特率表示有效数据的传输速率,用b/s 、bit/s、比特/秒,读作:比特每秒。

  波特率与比特率的关系也可换算成:比特率=波特率*单个调制状态对应的二进制位数

  例如假设数据传送速率为120符号/秒(symbol/s)(也就是波特率为120Baud),又假设每一个符号为8位(bit)即八相调制(单个调制状态对应3个二进制位),则其传送的比特率为(120symbol/s) * (3bit/symbol)=360bps.

 波特率

  esp8266如何用at指令设置波特率

  VCC接3.3V,GND连电源地,UTXD连接MAX232芯片RXD,URXD连接MAX232芯片TXD,CH_PD连接VCC上拉

  注意2个问题:串口波特率为9600(有时是115200),发送每串字符要以回车符或换行符作为结尾

  ESP8266可以配置成station 、AP、station+AP三种模式,就是说模块可以当成一个设备(client)连接局域网内的路由,也可以设置成是一个路由(sever),也可以既作为局域网里面的client同时又是其它client的sever!

  如若串口调试助手中不能发送AT指令,但是波特率默认为115200,想改成9600

  AT+UART=9600,8,1,0,0

  可以修改的

  ESP8266使用总结(一)

  首先,该模块使用了AT指令进行操作,我们要做的,就是将需要的AT指令,以字符串的形式发给模块,即可实现相应的功能。

  1. wifi模块ESP8266的默认波特率是115200,但是单片机不能达到那么快的传输速率,只能使用4800bps,那么设置的时候,必不可少的要先用转串口调试下载器(速度比较快,而且wifi模块默认115200bps,用单片机不能正确更改波特率,转串口工具可以),设置指令,AT+UART=4800,8,1,0,0,详细见手册,可以灵活设置。

  2. 设置完成以后,wifi模块在掉电以后还是会保持4800bps,下次使用,不再需要修改。

  3. 在使用单片机对wifi模块进行操作的时候,首先串口的波特率要设为4800,也就是TH1的初值必须是0xfa,这样再晶振为11.0592MHz的时候,可以准确的得到4800bps。

  4. 然后,先不插wifi模块的TX,DX到单片机的P30和P31口,因为下载程序的时候需要使用到这两个口,不能被干扰。下载程序完成以后,先断电,再把wifi模块的两个引脚接上,注意,模块和单片机上的TX,DX是交叉接的,这样才能正确工作,不像最小系统板下载程序的时候是对应接的。

  5. 最后再把单片机上电。还有一个注意的地方,就是,因为4800bps的话,传输速率比较慢,所以,在程序中每发送一条AT指令,必须要加以一定的延时,起码500ms我认为,这样保证模块的初始化时正确的。

  6. 打开手机,连上对应的wifi,再输入对应的IP地址和端口号,以及密码,就可以传输数据了,但是让wifi模块把单片机上的数据传输到手机上还没有完成,有待增加此方法。

  7. 经过一下午的调试,找到如何解决问题了,原来问题在于我的操作问题。每次创建了wifi,要先连上wifi才能够让wifi传数据给手机,手机没自动连接!

  ESP8266使用总结(二)

  1. 注意:ESP8266作为TCP Server时,存在超时机制,一段时间没有数据往来,就把client踢掉,所以程序中要有保持连接的操作,或者可以通过设置AT指令,设置不能踢掉客户端模式,但是不建议这样做。

  2. 在设置模式等都完成以后,用手机可以连上wifi模块,可以向wifi模块发送数据。但是想要把wifi模块上的数据回过来,需要通过客户的连接号才能辨清是哪一个client发送过来请求,例如:0,CONNECT,然后再把数据根据连接号把数据发送给该client,这样保证传输数据的正确性。接收到数据的格式:+IPD,0,3:ddf;+IPD,0,7:gfsghhf,这样的话,需要通过字符串的辨析,才能知道哪个客户端连接号发来数据了,例如上面举例,是客户端连接号为0,发送过来数据了。

  3. 使用AT指令时,必须是以字符串的形式传输到wifi模块中,所以,需要用到uart_sendstr,但是,有的指令是字符串中包含了字符串,编译的时候不能正确识别,所以需要字符串转UTF-8工具(ESP8266使用的是UTF-8标准),注意不能删掉字符串中的空,逗号,句号换行符什么的,如图

  4. 今天发现,第3条可以有更好的解决方法,而且很简单,只是用的比较少,我也没想到,字符串中的字符串使用\”…。\”表示即可!(需要好好补补C语言了)

  5. 51单片机程序中,需要对字符串进行很多操作,例如:AT指令和参数的拼接(这样比较灵活,参数最好也是字符串形式,减少工作量),截取wifi模块发送给单片机的字符串提示信息等等,所以我们需要做的是对字符串进行正确操作,每一个字符串函数都要测试功能,确保正确才能加入使用。

  6. 刚刚新买的wifi模块,要想在51单片机上使用,就要将波特率设的比较低,那么在使用AT+UART=4800,8,1,0,0命令的时候,一旦将最后第二个数据改了,那么串口调试软件上也要相应的更改校验方式,不然,下面的命令全部无用。

  7. 关于wifi模块的IP地址:wifi模块的IP也是可以设置的,如AT+CIPAP=“192.168.5.1” ,所以还是要对wifi模块进行读取IP的操作,以防被篡改IP地址。在显示能够连接时,必须要显示正确的IP地址,所以我们需要在程序一开始获取IP地址。

  8. 关于多连接问题:将先后连接的客户端,根据连接的先后顺序,手动给它们排出优先级序列,和客户连接号无关的序列,这样就能保持一个多连接的有优先级的队列,控制小车。当然,在使用相应优先级的时候,必须同时采用该优先级对应的客户连接号,才能准确的与某一个客户端收发信息。(有待编写程序时完善)

  9. 关于wifi模块回显字符串截取问题:由于回显的字符串是很不稳定的,就是有时候某一句后面带有\r\n,有时候又没有,而且串口也不会发送\0到SBUF中,那么,字符串的截取就比较困难了,或者说是笨方法。只能将\n作为字符串的读取辨析的开始,也就是一旦读取到了\n,设置标志位,表示下一个字符开始,就要接收,拼接并且辨析。命令的话,只读取回显中的某一位比较特别的位作为命令。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分