ESP8266_APP连接试验
- 概述
- 硬件部分
- 8266固件烧录
- Arduino IDE 8266版型下载
- 安装MQTT库
- ESP8266程序设计
- APP部分
-
概述
本次试验使用的是ESP8266 NodeMCU
硬件部分
8266固件烧录
固件烧录的是nodemcu官方固件,打开官方提供的ESP8266Flasher,在配置一栏选择nodemcu固件,烧录地址为0x00000。
![nodemcu烧录](https://img-blog.csdnimg.cn/20200519172949693.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU0MzQ2Mw==,size_16,color_FFFFFF,t_70#pic_center)
Arduino IDE 8266版型下载
打开Arduino IDE,在文件-首选项-附加开发板管理器网址中输入:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
![版型下载1](https://img-blog.csdnimg.cn/20200519173455915.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU0MzQ2Mw==,size_16,color_FFFFFF,t_70#pic_center)
然后打开工具-开发板-开发板管理器,在搜索框输入esp8266,在下方弹出的搜索结果中选中要下载的版型,点击安装即可。(下载速度较慢,可挂梯子)
![版型下载2](https://img-blog.csdnimg.cn/20200519173759807.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU0MzQ2Mw==,size_16,color_FFFFFF,t_70#pic_center)
到此为止,硬件部分的准备工作就完成了,接下来就可以使用Arduino IDE进行ESP8266的编程。
安装MQTT库
因本程序设计MQTT部分,因此还需要安装MQTT库才能正常编译程序,打开项目-加载库-管理库,有许多mqtt库可以选择,我使用的是PubSubClient。
![MQTT库](https://img-blog.csdnimg.cn/20200519174652331.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU0MzQ2Mw==,size_16,color_FFFFFF,t_70#pic_center)
ESP8266程序设计
代码不长,贴在下方
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
const char* wifissid = "Wifi_SSID";
const char* password = "Wifi_Password";
const char* mqtt_server = "***,***,***,***";
const char* mqtt_id = "827855942_ESP";
const char* Mqtt_sub_topic = "827855942_ESP";
const char* Mqtt_pub_topic = "827855942";
long lastMsg = 0;
void setup() {
pinMode(2, OUTPUT);
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void setup_wifi() {
Serial.println();
Serial.print("Connecting to ");
Serial.println(wifissid);
WiFi.begin(wifissid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
String msg="";
String LED_set = "";
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
msg+= (char)payload[i];
}
Serial.println(msg);
if(msg.indexOf("led"))
{
LED_set = msg.substring(msg.indexOf("led\":")+5,msg.indexOf("}"));
digitalWrite(2,!LED_set.toInt());
}
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect(mqtt_id)) {
Serial.println("connected");
client.subscribe(Mqtt_sub_topic,1);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
long now = millis();
if (now - lastMsg > 2000) {
lastMsg = now;
String json = "{\"temperature\":"+String(analogRead(A0))+"}";
client.publish(Mqtt_pub_topic,json.c_str());
}
}
APP部分
创建项目
Start a new Android project,我选择Empty Activity,name随意,language java,Android版本要小于等于手机安卓版本。(尽量用真机调试,虚拟机bug太多)
![app_1](https://img-blog.csdnimg.cn/20200519181712551.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU0MzQ2Mw==,size_16,color_FFFFFF,t_70#pic_center)
UI设计
打开app-res-layout下的activity_main.xml文件,设计UI
常用的代码列下
java android:orientation="vertical" //设置线性布局方向 android:background="#FFFFFF" //设置背景色 android:src="@drawable/pic" //ImageView下添加图片 android:layout_margin="10dp" //设置距离父空间边缘距离 android:id="@+id/image_1 //设置id android:layout_weight="1" //布局内设置权重 android:gravity="center_vertical" //布局内设置垂直居中
主程序设计
打开MainActivity.java编写程序
1. OnCreate函数是程序打开后最先运行的地方
2. 按钮单击事件
java button_1 = findViewById(R.id.button_1); //寻找XML里面真正的ID,与自己初始化的变量绑定 button_1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //这里是单击之后执行的地方 //在当前ativity 显示内容为hello的短时间弹窗 Toast.makeText(MainActivity.this,"hello",Toast.LENGTH_SHORT).show(); } });
3. 导入JAR包
将mqtt的JAR包复制到app下的libs文件夹中
右键JAR包Add as Lib确定![app_2](https://img-blog.csdnimg.cn/20200519183641965.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU0MzQ2Mw==,size_16,color_FFFFFF,t_70#pic_center)
4. 移植Mqtt_init()函数
5. 移植startReconnect()函数
6. 移植publishmessageplus()函数
7. 在OnCreate中加入
java Mqtt_init(); startReconnect(); handler = new Handler() {
注:每完成一小步都要刷入真机调试,以免调bug之痛
以上就完成了基本的app与ESP8266的通信。
![result_2](https://img-blog.csdnimg.cn/20200519185054690.png#pic_center)
![result_1](https://img-blog.csdnimg.cn/20200519184734195.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU0MzQ2Mw==,size_16,color_FFFFFF,t_70#pic_center)
感谢正哥,B站up阿正啷个哩个啷,大佬的教程
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)