谈到硬件开发无法绕开 ESP8266, 这个带有 Wifi 功能的芯片品牌近几年由于它便宜到令人发指的价格,开放的环境受到追捧。想知道更多它受追捧的原因可以看看 这篇文章。本文主要讲一下 ESP8266 在 Arduino 上的开发使用。
实际上,ESP8266 一开始是使用 AT 指令来开发的。后来由于收到欢迎,开发者建立和完善了新的开发机制,现在你可以在 Arduino 上用专属语言,NodeMCU固件上用 Lua 语言,Micropython 上用 Python 语言,甚至是 JavaScript 语言。感兴趣的可以搜一下对应的实现方式。
安装
附加开发板管理器(Board Manager)是官方推荐的安装方式。此方法通过在 Arduino IDE 的首选项设置里添加安装地址,使用 Arduino 内置的包安装管理方式进行安装。具体操作步骤是:
- 安装 CP1202 驱动;
- 点开首选项,在附加安装板管理器加入
http://arduino.esp8266.com/stable/package_esp8266com_index.json
,点击确定; - 点击工具的库管理界面,待加载完成选择或者输入 ESP8266 安装即可。如果出现网络连接错误等提示,可能是网络环境不好,需要换一个更好的网络环境才能安装成功,差网络会一直报错,搞到抓狂还以为是配置出现了什么问题。如果进度条显示安装速度很慢,可以先下载安装包到缓存,再次安装。缓存位置可以在首选项的附加开发板的管理器下面看到。
- 安装成功以后,工具菜单的开发板下便可以选择 ESP8266 开发板了。点击 查看更详细的操作步骤。
软件编写
在 Arduino 上直接编写测试用例:
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#define USE_SERIAL Serial
ESP8266WiFiMulti WiFiMulti;
void setup() {
USE_SERIAL.begin(115200);
USE_SERIAL.println();
USE_SERIAL.println();
USE_SERIAL.println();
for(uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
}
//路由器名称和密码
WiFiMulti.addAP("ssid", "password");
}
void loop() {
if((WiFiMulti.run() == WL_CONNECTED)) {
HTTPClient http;
USE_SERIAL.print("[HTTP] begin...\n");
http.begin("http://192.168.1.165:8655/la/v1/user/feedback"); //HTTP
//需要传输的数据
char postData[] = "title=arduino&content=";
char dataBuff[50];
strcat(postData,testData);
//头信息,需要的反注释就可以
//http.addHeader("Authorization", "Bearer 77eb2493769bb566f5bc346f6d598e7");
//http.addHeader("Content-Type", "application/json;charset=utf-8");
//http.addHeader("cache-control", "no-cache");
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int httpCode = http.POST(postData);
if(httpCode > 0) {
// HTTP header has been send and Server response header has been handled
USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
// file found at server
if(httpCode == HTTP_CODE_OK) {
String payload = http.getString();
USE_SERIAL.print(payload);
}
} else {
USE_SERIAL.print("fail");
USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
}
delay(1000);
}
软件烧录
如果是 D1 MINI 这样自带 USB 接口的模块,插到电脑上,在 Arduino 上选择 ESP8266 的开发版点击烧录就可以了。如果是 ESP01 这样的单一模块,一般要通过 USB 转 TTL 模块进行烧录。接线的时候 一定要确认跳针在正确的位置,供电 3.3v, 否则会烧坏模块。烧录模式一定要将 GPIO0 接地线,否则会烧录失败。