arduino最全中文教程,arduino教程合集

首页 > 技术 > 作者:YD1662023-03-16 09:33:35

解决了接口问题,下一步让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教程系列:串口通信指南》。两者一并食用,味道更加。

arduino最全中文教程,arduino教程合集(1)

这是一个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);

}

}

这是一个控制灯开关的代码。

其他资料及说明

我使用的是乐鑫的固件,硬件不知道什么牌子的,买的套装。

技术文档 | 乐鑫科技 (espressif.com)

上面有所有的指令及其示例。

可以参考乐鑫的文档刷入RTOS,也就可以作为板子玩了。

我还有其他示例代码和指令集参考的PDF,不方便访问官网的可以向我发送邮件获取。邮件地址见第一篇教程。

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.