一、Arduino IDE简介
Arduino IDE是专门为Arduino单片机打造的C语言开发环境,简单易用,通用性好,ESP8266本身对编程环境的要求并不高,总体来看,通过Arduino开发ESP8266能够更好的实现代码移植,同时摆脱AT指令的简单操作方式,可操作性更高,当然,对开发者的要求也会比较高。
我们怎么理解这种操作方式呢?
实际上,ESP8266作为单片机的一种,可是视为Arduino UNO设备的WIFI版,当然,从引脚数量和内存上,ESP8266确实有比较大的短板,但是在网络编程方面ESP8266更有直观优势。
个人主要是使用ESP8266进行网络通信工作,再通过串口实现8266与Arduino的物理通信和信息传送。就相当于把ESP8266当做传递信息的“信使”,用户网络通信直接编程了本地通信,在代码编写、软件结构设计等方面都会更加便捷。
下面是Arduino ide的操作环境和官方下载地址,大家可直接下载或者在百度搜索下载都是可以的:
https://www.arduino.cc/en/Main/Software
从上面的界面可以看到,Arduino封装好以后,我们看不见main函数,取而代之的是setup()函数和loop()函数。
顾名思义,setup()函数优先运行,这里可以配置我们需要预定义的一些基本动作操作,如端口速率,启动项等。
loop()函数执行后,系统会不间断执行循环操作,我们可以把loop函数当作while(1)来看待。
二、环境配置
(一)在Arduino IDE的“文件”-“首选项”的“附加开发板管理网址”上,填入以下地址
http://arduino.esp8266.com/stable/package_esp8266com_index.json
点确定后,再执行下一步操作。
(二)在“工具”-“开发板”-“开发板管理”里,搜索ESP8266开发板信息,并点击安装
由于这个网址是外网地址,自己亲测效果来看,下载速度是很慢的,感觉像是老牛。很无语,毕竟不是国产货,不过也可以直接下载一个版本的安装包,然后在安装系统里更新替换也是可以的。
我个人就是这个做的,至于这种方式的安装包,大家有需求的,可以留言给我。
(三)安装好后就是选择板卡和配置了
以上配置是ESP8266-01S是配置。特别是FLASH MODE不要轻易选错,不然烧录会有问题,这个很关键。
如果你连接的设备是NODE MCU。那么相应的内存和配置,可以根据实际情况进行调整。
三、测试效果
很对人可能对以上配置有困惑,到底配置的信息对不对,特别是内存设置的信息对不对,不太好预估。不用担心,Arduino预装这个安装包时,只要增加了ESP8266开发板信息,相应的也会增加ESP8266实例代码库,里面有专门检测配置信息的,如下:
void setup(void) {
Serial.begin(115200);
}
void loop() {
uint32_t realSize = ESP.getFlashChipRealSize();
uint32_t ideSize = ESP.getFlashChipSize();
FlashMode_t ideMode = ESP.getFlashChipMode();
Serial.printf("Flash real id: %08X\n", ESP.getFlashChipId());
Serial.printf("Flash real size: %u\n\n", realSize);
Serial.printf("Flash ide size: %u\n", ideSize);
Serial.printf("Flash ide speed: %u\n", ESP.getFlashChipSpeed());
Serial.printf("Flash ide mode: %s\n", (ideMode == FM_QIO ? "QIO" : ideMode == FM_QOUT ? "QOUT" : ideMode == FM_DIO ? "DIO" : ideMode == FM_DOUT ? "DOUT" : "UNKNOWN"));
if(ideSize != realSize) {
Serial.println("Flash Chip configuration wrong!\n");
} else {
Serial.println("Flash Chip configuration ok.\n");
}
delay(5000);
}
具体效果我就不截图了,需要的可以留言,通过以上指令,系统会检测出配置的一些主要信息是否正确,不正确的,按提示修改即可,非常方便。
这里,再推荐一段代码,个人认为是比较实用的:
#include "ESP8266WiFi.h"
void setup() {
Serial.begin(115200);
// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Setup done");
}
void loop() {
Serial.println("scan start");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0)
Serial.println("no networks found");
else
{
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i)
{
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
delay(10);
}
}
Serial.println("");
// Wait a bit before scanning again
delay(5000);
}
通过这段代码,我们可以检测出附件的WIFI网络信息,为我们测试单片机WIFI设备是否正常提供了依据。
四、注意事项
(一)推荐实用NODE MCU作为主要的开发测试工具,毕竟此款产品内存大,只需一个USB数据线即可连接操作。若想后期移植到01s设备中,也建议现在MCU中测通再烧录到01s中。
(二)目前联网只能是2.4G片段的WIFI,如果是5G频段的WIFI还不行,这需要硬件升级,不过还好,我们目前的大部分网络设备都是2.4G的。
(三)若Arduino IDE编译成功但上传代码出现问题时,优先采用重启单片机方式解决,即插拔电源。当然,01S设备需要首先把GPIO0引脚连接负极,否则无法实现烧录,同时,烧录后原来的配置信息就直接覆盖了,目前好像还没有恢复办法。因此,如果之前有相关信息存储,可考虑提前备份。
好了,就写到这里了,大家有什么疑问可以@我,我再逐步丰富,欢迎支持哈!