网站首页 > 技术教程 正文
上篇文章,我们已经解决了Arduino端口不够用的问题,接着我们开始扩展Arduino的网络通信能力,而这,经过筛选,我选择了ESP8266芯片。实际上ESP系列芯片都可以作为选择,只是我手中刚好有一个8266,用作讲解。(实际上,8266的淘宝价格只有两块钱,属于成本极低的实验材料)。
8266具有以下五个优点:1.工作温度范围大,且能够保持稳定的性能,能适应各种操作环境;2.集成了 32 位 Tensilica 处理器、标准数字外设接口、天线开关、射频 balun、功率放大器、低噪放大器、过滤器和电源管理模块等,仅需很少的外围电路,可将所占 PCB 空间降低;3.专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了超低功耗。ESP8266EX 具有的省电模式适用于各种低功耗应用场景;4.内置超低功耗 Tensilica L106 32 位 RISC 处理器,CPU 时钟速度最高可达 160 MHz,支持实时操作系统 (RTOS) 和 Wi-Fi 协议栈,可将高达 80% 的处理能力留给应用编程和开发。怎么,是不是看得心痒痒?下面咱们就来看看怎么使用它吧。5.还有一个激动人心的,它自带一个Flash。我们甚至可以向里面存一些自己的东西进去。不过,这个功能未向用户开放,我们需要自己实现API才可以使用。
ESP的教程不多,我是从知乎上的一个教程里入门的,不过那个讲的不太符合初学者的逻辑,当时学的一头雾水,不甚理解。如今,对ESP的基本用法掌握后,我想为硬件爱好者提供一个简易的ESP入门教程。本教程假定读者拥有串口通信的知识,关于串口通信,可以参考我的下一篇文章《Arduino教程系列:串口通信指南》。两者一并食用,味道更佳。
这是一个8266的下面,上面一共有八个接口,两个用于供电,两个用于串口通信。一个使能端,还余三个。对于入门,了解这五个足以,其他的可以参考下文中我推荐的资料。
在使用时,ESP采用串口的形式与其中的芯片进行通信,这个模块就像Arduino一样,可以看作是一个独立的板子,只是上面没有额外的通信引脚罢了。第一段中我介绍的优点中,它甚至可以支持RTOS。所以,我们对待它就要像对待Arduino一般。通常在我们购买了ESP后,它里面已经烧录好了功能代码,负责Wifi通信(它支持链接其他的Wifi,也可以作为Wifi使用,这两个功能可以同时打开,我们叫着叫什么?对,路由。我们甚至可以把它当作路由器使用。)我们只需要对它下达相应的指令,便可以打开相应的功能。Wifi通信的数据它会通过串口的形式传递给其他芯片。也即我们利用串口通信的两根线便扩展了Wifi功能。
有一点我想提前点明:不知道是我的设备原因还是其他不知名的原因,利用串口通信获取信息时总会出现一定概率的乱码。鉴于我的其他设备采用串口通信时并无障碍,猜测是我手中这款ESP芯片是次品。
为ESP下指令就和Linux一样,向其传送指令,它会回显或者返回相应的信息。
使用流程如下:
1. 启动
通电后,系统进行初始化。确保功能正常。
2. 配网
发送指令,连接wifi或设置链接密码,供其他设备链接。
"AT+CWMODE=3\r\n"。设置wifi模式。3表示SoftAP+Station模式,即热点+终端。即能接受外部wifi信号,又能为其他设备提供wifi信号。
"AT+CIPMUX=1\r\n"。设置多链接。可以供多个设备链接。
“AT+CIPSERVER=1,5000\r\n“。建立TCP服务器,端口设为5000。
3. 循环
等待接受消息,并进行处理。
接受信息的代码如下:
```
String _comdata_wifi = ""; //for incoming wifi serial data
void getWifiSerialData(){//获取原始通信信息
while (wifi.available() > 0){
_comdata_wifi += char(wifi.read()); //get wifi data
delay(4);
}
}
```
在loop循环中处理接受的消息即可。
ESP的波特率为115200.初始IP为192.168.4.1。向ESP发送指令时要确保至少间隔500ms,否则会出错。
完整代码:
#include <SoftwareSerial.h>
#define WIFI_TX 9
#define WIFI_RX 8
#define LED 13
SoftwareSerial wifi(WIFI_RX, WIFI_TX); //RX, TX
String _comdata_wifi = ""; //for incoming wifi serial data
String _prodata = "";
void setup() {
pinMode(LED,OUTPUT);
digitalWrite(LED,LOW);
Serial.begin(9600);
wifi.begin(115200);
Serial.println("system is ready!");
wifi.println("AT+CWMODE=3\r\n");
delay(500);
wifi.println("AT+CIPMUX=1\r\n");
delay(500);
wifi.println("AT+CIPSERVER=1,5000\r\n");
delay(500);
}
void loop() {
getWifiSerialData();
if(Serial.available()){
String order = "";
while (Serial.available()){
char cc = (char)Serial.read();
order += cc;
delay(2);
}
order.trim();
wifi.println(order);
}
if(_comdata_wifi!=""){
if((_comdata_wifi[2]=='+')&&(_comdata_wifi[3]=='I')&&(_comdata_wifi[4]=='P'))//MCU接收到的数据为+IPD时进入判断控制0\1来使小灯亮与灭
{
if((_comdata_wifi[5]=='D')&&(_comdata_wifi[8]==','))
{
if(_comdata_wifi[11]=='0')
{
digitalWrite(LED,LOW);//0 灯灭 }
else if (_comdata_wifi[11]=='1')
{
digitalWrite(LED,HIGH); //1 灯亮
}
}
}
else{
if(_comdata_wifi[0] == '1'){
digitalWrite(LED,HIGH);
}
else if(_comdata_wifi[0] == '0'){
digitalWrite(LED,LOW);
}
}
_comdata_wifi = String("");
}
}
void getWifiSerialData(){//获取原始通信信息
while (wifi.available() > 0){
_comdata_wifi += char(wifi.read()); //get wifi data
delay(4);
}
}
这是一个控制灯开关的代码。
其他资料及说明
我使用的是乐鑫的固件,硬件不知道是什么牌子的,买的套装。
可以参考乐鑫的文档刷入RTOS,也就可以作为板子玩了。
- 上一篇: 玩openwrt的基础
- 下一篇: 浏览器原理技术入门
猜你喜欢
- 2024-11-26 正点原子STM32F4/F7水星开发板资料连载第四十四章NAND FLASH实验
- 2024-11-26 动画制作软件Flash软件Adobe Animate AN CC 2020
- 2024-11-26 每日一练|教育公共基础知识
- 2024-11-26 FANUC 系统操作基础(三)
- 2024-11-26 pr剪辑必备新手教程:PR软件中的基础知识
- 2024-11-26 阿波罗 STM32F767 开发板资料连载第四十六章 NAND FLASH 实验
- 2024-11-26 正点原子STM32F4/F7水星开发板资料连载第四十六章 汉字显示实验
- 2024-11-26 初学者怎么入门大语言模型(LLM)?看完这篇你就懂了!
- 2024-11-26 Flash在2020年底停止更新,为何会遭到Adobe抛弃?
- 2024-11-26 嵌入式开发入门指引
你 发表评论:
欢迎- 04-27spring框架怎么实现依赖注入?
- 04-27卸载 Mac 应用程序的 4 种基础方法
- 04-27用户界面框架jQuery EasyUI示例大全之Application
- 04-27win7 64位 server.CreateObject("excel.application")
- 04-27SpringCloud的配置文件bootstrap和application的区别
- 04-27Excel VBA小技巧:用Application.Version判断用户Excel版本
- 04-27JSA宏教程——应用程序(Application)对象事件
- 04-27详解flink 1.11中的新部署模式-Application模式
- 最近发表
-
- spring框架怎么实现依赖注入?
- 卸载 Mac 应用程序的 4 种基础方法
- 用户界面框架jQuery EasyUI示例大全之Application
- win7 64位 server.CreateObject("excel.application")
- SpringCloud的配置文件bootstrap和application的区别
- Excel VBA小技巧:用Application.Version判断用户Excel版本
- JSA宏教程——应用程序(Application)对象事件
- 详解flink 1.11中的新部署模式-Application模式
- 为什么CEO念“C~E~O”,而APP却不能念A~P~P?
- 汇川技术|Inoproshop软件中Application简介及常用功能
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)