ESP8266_APP连接试验

  • 概述
  • 硬件部分
    • 8266固件烧录
    • Arduino IDE 8266版型下载
    • 安装MQTT库
    • ESP8266程序设计
  • APP部分
    • 创建项目
    • UI设计
    • 主程序设计

概述

本次试验使用的是ESP8266 NodeMCU

硬件部分

8266固件烧录

固件烧录的是nodemcu官方固件,打开官方提供的ESP8266Flasher,在配置一栏选择nodemcu固件,烧录地址为0x00000。

Arduino IDE 8266版型下载

打开Arduino IDE,在文件-首选项-附加开发板管理器网址中输入:
http://arduino.esp8266.com/stable/package_esp8266com_index.json

然后打开工具-开发板-开发板管理器,在搜索框输入esp8266,在下方弹出的搜索结果中选中要下载的版型,点击安装即可。(下载速度较慢,可挂梯子)

到此为止,硬件部分的准备工作就完成了,接下来就可以使用Arduino IDE进行ESP8266的编程。

安装MQTT库

因本程序设计MQTT部分,因此还需要安装MQTT库才能正常编译程序,打开项目-加载库-管理库,有许多mqtt库可以选择,我使用的是PubSubClient。

ESP8266程序设计

代码不长,贴在下方

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
const char* wifissid = "Wifi_SSID"; //自己家WIFI
const char* password = "Wifi_Password"; //自己家WIFI密码
const char* mqtt_server = "***,***,***,***";//MQTT服务器地址
const char* mqtt_id = "827855942_ESP";//MQTT ID需要唯一,这里我设置成自己的QQ号+_ESP
const char* Mqtt_sub_topic = "827855942_ESP";   //ESP8266订阅的topic,其他客户端向此topic发送信息时ESP8266会收到,设成自己的QQ号+_ESP
const char* Mqtt_pub_topic = "827855942";  //ESP8266发布消息的topic,上报消息给手机APP的TOPIC,设成自己的QQ号
long lastMsg = 0; //定时用的void setup() {pinMode(2, OUTPUT);     Serial.begin(115200);//设置波特率setup_wifi();//初始化wificlient.setServer(mqtt_server, 1883);//设定MQTT服务器与使用的端口,1883是默认的MQTT端口client.setCallback(callback); //设定回调方式,当ESP8266收到订阅消息时会调用此方法
}//初始化Wifi
//连接成功后可在串口监视器看到ESP8266的IP地址
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());
}//回调函数,参数固定不能改
//payload内容可以是任意的,此程序中传递的是JSON数据
void callback(char* topic, byte* payload, unsigned int length) {String msg="";String LED_set = "";Serial.print("Message arrived [");Serial.print(topic);Serial.print("] ");//msg中存放的就是传递过来的json数据,此处为{"set_led":1}格式for (int i = 0; i < length; i++) {msg+= (char)payload[i];}Serial.println(msg);if(msg.indexOf("led"))  //判断是否是要设置LED灯{//取出LED_set数据 并执行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() {//MQTT是否连接,若未连接则重连if (!client.connected()) {reconnect();}client.loop();long now = millis();//运行时间if (now - lastMsg > 2000) {lastMsg = now;//打包发送数据给pubtopic    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太多)

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确定
4. 移植Mqtt_init()函数
5. 移植startReconnect()函数
6. 移植publishmessageplus()函数
7. 在OnCreate中加入
java Mqtt_init(); startReconnect(); handler = new Handler() {
注:每完成一小步都要刷入真机调试,以免调bug之痛

以上就完成了基本的app与ESP8266的通信。


感谢正哥,B站up阿正啷个哩个啷,大佬的教程

ESP8266_APP连接试验相关推荐

  1. 爱快 Docker NodeRed Tcp服务器远程连接试验

    有一台基于4415软路由安装的ubuntu server系统,在Ubuntu上通过Docker安装了NodeRed.ubuntu通过爱快硬路由与外网连接.爱快硬路由通过动态域名和端口映射实现远程访问u ...

  2. 效率提升看得见 神策 A/B 测试可视化试验能力正式上线

    据了解发现,相较于产品忠诚度,用户更看重体验的愉悦感和价值感.如何围绕用户流失和留存全面"战斗"是产品能够持续发展并在行业中脱颖而出的关键.A/B 测试作为神策数据 SDAF 闭环 ...

  3. VMWARE 构建局域网 + VMWARE SQL Server 服务器搭建

    前言:本文的主要目标: 1 搭建VMWARE为基础的虚拟局域网:我有两三台PC机器(windows7 + Mac),里面各跑一两个VMWARE主机,目标是构建一个局域网,把这些机器都串接起来,为以后的 ...

  4. 二建《机电》案例 100 问

    二建<机电>案例 100 问 1.在定制分支电缆时,应注意哪些问题? [答案]订购分支电缆时,应根据建筑电气设计图确定各配电柜位置,提供主电缆的型 号.规格及总有效长度:各分支电缆的型号. ...

  5. wacom怎么调压感_新买的数位板(手绘板)怎么设置,数位板没有压感没反应怎么办...

    很多同学在买了数位板以后,总是怀着非常兴奋的心情,迫不及待地插上USB端口,就开始想要进行创作. 或者是还会先看看说明书,一步步按照书上的要求来. 然而到头来,还是有很多同学会发现,自己的数位板,好像 ...

  6. 解密Blob加密的src拼接的url视频资源

    今日无bug,闲来观看视频,想下载后观看岂不美滋滋... 故F12开发者模式查看引用地址 甚是欣喜岂不很好下载,好吧是广告.. 接着看 <video src="blob:https:/ ...

  7. 不属于未来新型计算机的是光子计算机,光子计算机(三进制计算机很可怕么)

    光子计算机 1990年初,美国贝尔实验室制成世界上第一台光子计算机. 光子计算机是一种由光信号进行数字运算.逻辑操作.信息存贮和处理的新型计算机.光子计算机. 量子计算机全世界有一些,但是由于能耗大, ...

  8. 如何让开关打开_直流高压发生器发生过压过流等故障时应如何处理

    当直流高压发生器发生过压.过流等故障时如何处理?下面为大家讲解一下. 直流高压发生器随附有高压屏蔽电流表为数显微安表,连接试验品的插线孔在表顶端上,也是做为电源开关,当停止使用的时候要拔掉插头,就自动 ...

  9. 【SCL】博图SCL语言学习 (指令篇 )

    博图SCL语言常用指令的学习和使用以及相关例题. 文章目录 目录 文章目录 前言 一.逻辑运算符的使用 1.点动 2.自锁(起保停) 3.正反转 4.小结 二.常用程序控制指令 1. if...the ...

最新文章

  1. Vector Enumeration
  2. 手撕python_Pytorch手撕经典网络之LeNet5
  3. 国家开放大学2021春1108钢结构(本)题目
  4. final个人阅读作业
  5. 运行初始化过程代码笔记
  6. 怎样开图纸便宜_在县城开一家儿童乐园怎么样?开多大面积合适?投资需要多少钱?...
  7. 最完整的国内手机号段
  8. 助力网络安全发展,安全态势攻防赛事可视化
  9. 从Ping-Pong消息学习Gossip协议
  10. 《车联网(智能网联汽车)产业发展行动计划》正式发布,车联网产业发展进一步提速...
  11. 不可不知的国际贸易术语
  12. 第一届安洵杯writeup
  13. 塔望食业洞察|人参饮料行业环境 市场现状及发展思考
  14. java群侠传_梦幻群侠传之天剑如虹(下)
  15. 三国演义亲和度python_Python之三国演义源码
  16. 青少年的音乐合成器原理指南
  17. 数据标注自动化工具 - Snorkel【机器学习】
  18. python后端常见架构_常见的后端框架
  19. mysql workbench安装教程_MySql可视化工具MySQL Workbench使用教程
  20. 计算机硬盘盒,避免踩坑,如何挑选适合自己电脑的硬盘盒?

热门文章

  1. bzoj 1055: [HAOI2008]玩具取名(区间DP)
  2. matlab 纹理映射
  3. 吴恩达神经网络和深度学习-学习笔记-19-机器学习策略(正交化+单一数字评估指标)
  4. java获取屏幕上某坐标点的颜色
  5. js中WINDOW对象中的navigator成员对象
  6. python批量更改图片尺寸(保持长度和高度的长短关系)
  7. modelsim仿真ROM IP数据输出为0的解决办法
  8. 使用c#调用XMLHTTP(XMLHTTPClass) ,发送和返回 json
  9. Linux操作系统文件链接问题
  10. 怎样设置HTML上传控件,上传文件的大小