作用:不用AT指令,不用多余的串口调试工具,直接用arduino编辑器对esp8266-01板烧写arduino程序。
Arduino环境的搭建:
除了从arduino官网上下载完整的编辑器(建议下载1.6.7—1.6.9版本,1.6.10以上版本貌似改了太多东西不确定能不能用)外,还需要连网下载有关esp8266的arduino插件
1.点工具—>开发板—>开发板管理器
2.在确保连上互联网的前提下收esp8266,下载最高版本
3.点文件—>首选项,将
http://arduino.esp8266.com/stable/package_esp8266com_index.json这个地址添加到如图位置
4.重启编辑器,发现工具—>开发板里多了几个关于ESP8266的可选开发板(第一张图左下方这样)表示搭建成功。
接线图:
一些有关的重要说明:
1.esp8266-01板对电压的要求很高,烧写时电源一定要采用3.25V左右的(USB转TTL模块直接提供的电压貌似太高,不行,当然如果你觉得可以,不妨试试。我采用一个ARDUINO UNO供电)正负极再并联一个10Uf的电容,稳压。在烧完程序后的使用过程中它对电压的要求就没这么高了。
2.ESP8266板其中有一个引脚叫GPIO16,这个脚还有一个名称叫RESET,一般这个引脚悬空或者最好接一个10K左右的上拉电阻(上拉电阻就是将不确定的信号通过一个电阻钳位在高电平)。一旦这个脚接到了负极,板子就会reset.
3.RX,TX交叉链接
4.CH_PD这个引脚无论是烧程序也好,烧完程序应用也好,一定要加个20k左右的上拉电阻(不这么做串口是没有数据的,或者烧好的程序也是没法跑的)
5.GPIO0这个引脚在烧程序的时候必须接负极,烧完程序后想要掉电重新运行的话,必须将这个引脚拉高或者悬空。
烧写:
温馨提示:这个步骤是最需要耐心的,不仅烧写过程大约需要2分钟,而且还不保证每次都烧成功(成功率在30%左右,可能和电压有关,保持稳定的3.25V电压可提高成功率)但是如果上述步骤都做对了,我保证,并且请你一定要相信自己一定会成功的。
先提供一段有注释的MQTT nodemcu的代码
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* ssid = "Ubiways";//连接的路由器的名字
const char* password = "123abc456d";//连接的路由器的密码
const char* mqtt_server = "iot.eclipse.org";//服务器的地址
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;//存放时间的变量
char msg[50];//存放要发的数据
int settem;//温控变量
void setup_wifi() {//自动接入网络
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
}
void callback(char* topic, byte* payload, unsigned int length) {//用于接收服务器接收的数据
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);//串口打印出接收到的数据让你看看
}
Serial.println();//换行
if ((char)payload[0] == 'a') {//如果收到的数据是a
settem++;
}
}
void reconnect() {//等待,直到连接上服务器
while (!client.connected()) {
if (client.connect("HZYhahahASa")) {//接入时的用户名,尽量取一个不易与别人重复的用户名
client.subscribe("setmessage");//接收外来的数据时的intopic
} else {
Serial.print("failed, rc=");
Serial.print(client.state());//重新连接
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup() {//初始化程序,只运行一遍
settem=0;
Serial.begin(9600);//设置串口波特率(与烧写用波特率不是一个概念)
setup_wifi();
client.setServer(mqtt_server, 1883);//1883为端口号
client.setCallback(callback);
}
void loop() {//主循环
float tem=24.68;//温度,测试使用
digitalWrite(BUILTIN_LED, HIGH);
reconnect();//确保连上服务器,否则一直等待。
client.loop();//MUC接收数据的主循环函数。
long now = millis();//记录当前时间
if (now - lastMsg > 2000) {//每隔2秒发一次信号
lastMsg = now;//刷新上一次发送数据的时间
dtostrf(tem,1,2,msg);//将float转为char的数组msg,其中第三个传入值(2)是保留的位数(2位)
client.publish("temperature", msg);//发送数据,其中temperature是发出去的outtopic(不清楚可以百度MQTT协议)
snprintf (msg, 75, "%d", settem);//将int类型的settem转为char的数组.
client.publish("backa", msg);//反馈设定的温度值
Serial.println("ok!");//串口打印OK!
}
}
点工具—>开发板—>Generic ESP8266 Module
然后Flash mode选QIO
然后编程器选上图这个,因为这个比较快速。
选好端口后直接点击上传(这个时候等到差不多编译完成的时候,最好断开CH_PD这个脚,然后马上再接上,会发现蓝灯闪一下,这样可以提高成功率,具体什么原因我还不清楚,多次实验得出)。
若上传失败,必须断开CH_PD这个脚,然后再接上,蓝灯闪一下后再次烧写。
离开烧写环境自运行:为你烧好程序的esp8266提供一个3.3V左右的电源,电源的要求再也没烧写时这么苛刻。 用上拉电阻把CH_PD这个脚一直拉高,GPIO0在板子刚启动时禁止拉低。由于此板可用引脚数少,所以最好用串口与其他单片机双机通信。(双机通信程序在我另一篇博客里有写)