Arduino应用开发——手机APP控制LED
Arduino应用开发——手机APP控制LED
目录
- Arduino应用开发——手机APP控制LED
- 前言
- 1 工作原理
- 2 硬件准备
- 3 软件准备
- 3.1 Arduino IDE环境搭建
- 3.2 手机安装Blinker APP
- 4 Blinker APP注册
- 4.1 注册账号
- 4.2 新建一个设备
- 5 Arduino代码编写
- 6 运行测试
- 结束语
前言
物联网是最近几年比较火的一个话题,什么是物联网?
物联网(Internet of Things,简称IoT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术,实时采集任何需要监控、 连接、互动的物体或过程,采集其声、光、热、电、力学、化学、生物、位置等各种需要的信息,通过各类可能的网络接入,实现物与物、物与人的泛在连接,实现对物品和过程的智能化感知、识别和管理。物联网是一个基于互联网、传统电信网等的信息承载体,它让所有能够被独立寻址的普通物理对象形成互联互通的网络。
简单的来说就是通过有线和无线的方式组成一个网络系统,并将所有硬件设备纳入这个网络系统之中,从而达到各个设备之间自由交互信息、控制等目的。
特别说明:通过网络远程控制LED的方式有很多,本文介绍的这种方式是基于blinker的服务器和APP实现的。
1 工作原理
Blinker厂家有自己的一个服务器,我们的设备(esp8266、esp32、手机等)都可以通过网络接入到这个服务器,手机app我们看不到源码不确定是以什么样的方式接入的,我主要讲一下MCU(esp8266、esp32等)这边,MCU是通过WIFI连接到互联网的,然后通过MQTT协议接入到Blinker的服务器,MCU作为客户端,服务器作为服务端。具体MQTT的实现原理这里不多说了,光是MQTT这一个话题都可以写好多文章了,想深入了解的同学可以自行查阅资料。
当MQTT连成功之后,MCU会一直侦听,等待服务器下发数据。这个时候我们可以通过手机app操作,比如点一下开灯,服务器收到这个开灯命令后会通过MQTT发送命令到MCU,MCU接收到数据并解析命令后执行点灯的操作。服务器在这里相当于一个中转站,把手机的操作转发到设备端,实现了手机和设备之间的互动。不过有一点要说明的是,设备和服务器是通过MQTT连接的,而手机app和服务器则不一定是用MQTT,个人觉得用http的可能性更大,但是看不到源码,所以实际上是怎么通讯的就不清楚了,这个也不是很重要,并不影响实际的使用。
2 硬件准备
我这里以ESP8266和ESP32为例讲解,其他MCU方法和原理都是一样的,所以根据自己的MCU选择其中一种即可。
硬件配置如下:
模块 | 型号 | 说明 |
---|---|---|
ESP8266 | ESP-12F | 这是安信可的一款模组,内部主要是用乐鑫的ESP8266EX再加上一个片外FLASH组成,开发板型号是NodeMCU-12F(CH340版本) |
ESP32 | ESP-WROOM-32 | MCU是乐鑫的一款芯片,开发板型号ESP32 DEVKITV1 |
具体的硬件参数和电路原理图这里就不发出来了,不同厂家做的开发板引脚可能会有点差别。
3 软件准备
版本说明:
本文测试时各软件使用的版本如下:
软件 | 版本 | 备注 |
---|---|---|
Arduino IDE | 1.8.16 | Blinker需要配合1.8.x及以上版本的Arduino IDE |
ESP8266 package | 3.0.2 | Blinker需配合使用3.0.0或以上release版本的ESP8266 package |
ESP32 package | 2.0.1 | Blinker需配合使用2.0.0或以上版本的ESP32 package |
Blinker arduino package | 0.3.9 | 当前最新版本,以后可能会有更新 |
Blinker APP | 2.5.2(安卓版) | 当前最新版本,以后可能会有更新 |
3.1 Arduino IDE环境搭建
Arduino开发板库安装
esp8266和esp32开发板环境搭建具体就不说了,不懂的同学可以看下我之前发布的博客。
esp8266开发入门教程(基于Arduino)——环境安装
ESP32 Arduino开发环境搭建
使用VS code搭建Arduino IDE环境
Blinker库安装
1)下载Blinker Arduino库压缩包
Blinker Arduino库可以在官网下载,也可以在Github或者我的网盘上下载。
Blinker Arduino库官网下载:https://diandeng.tech/dev
Blinker Arduino库Github下载:https://github.com/blinker-iot/blinker-library/archive/master.zip
Blinker Arduino库云盘下载:https://pan.baidu.com/s/1VlyYBs1-pEA-L9fUI-t_dA
提取码:m660
2)安装Blinker库
打开Arduino IDE,点击 项目 -> 加载库 -> 添加.ZIP库,选择下载好的压缩包,等待安装完成即可。
3.2 手机安装Blinker APP
安装包可以在官网下载,也可以在手机的应用商店下载。
Blinker APP官网下载:https://diandeng.tech/dev
4 Blinker APP注册
4.1 注册账号
打开安装好的Blinker APP,注册一个账号并登录。
4.2 新建一个设备
登录账号进入之后,如果没有设备,先点击 “添加设备”
,我们这里选 “独立设备”
。
然后选择接入方式,我们这里选 “网络接入”
。
服务器我们这里选 “点灯科技”
,直接用Blinker的服务器。
然后我们就得到了一个设备密钥(Secret Key),这个密钥要在后面写到我们的应用代码里面的,这里可以先不管,返回设备列表,在设备的详细信息里面也可以看到设备密钥。
打开我们新建的设备,这个设备的控制界面是可以自定义的,按键和窗口这些都可以自己调整,我这里只是为了测试图方便就直接导入一个现成的示例。
在设备的详细信息里面可以修改设备的名称,也可以看到设备密钥,这个密钥在后面写代码的时候要用到。
5 Arduino代码编写
示例代码如下:
提示:设备密钥、WIFI账号和密码要根据自己修改,代码中的定义仅供参考。密钥可以在手机Blinker APP的设备信息里面查看。
注:该代码esp8266和esp32通用
#define BLINKER_WIFI#include <Blinker.h>char auth[] = "testkey"; // 设备密钥
char ssid[] = "test"; // WIFI账号
char pswd[] = "12345678"; // WIFI密码#define LED_PIN 5 // LED引脚// 新建组件对象
BlinkerButton Button1("btn-abc");
BlinkerNumber Number1("num-abc");int counter = 0;// 按下按键即会执行该函数
void button1_callback(const String & state)
{BLINKER_LOG("get button state: ", state);digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // 翻转LED灯状态
}// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{BLINKER_LOG("Blinker readString: ", data);counter++;Number1.print(counter);
}void setup()
{// 初始化串口Serial.begin(115200);BLINKER_DEBUG.stream(Serial);BLINKER_DEBUG.debugAll();// 初始化有LED的IOpinMode(LED_PIN, OUTPUT);digitalWrite(LED_PIN, HIGH);// 初始化blinkerBlinker.begin(auth, ssid, pswd);Blinker.attachData(dataRead);Button1.attach(button1_callback);
}void loop() {Blinker.run();
}
注:上面的例子只展示了应用部分,因为很多地方都是直接调用API,所以我们不容易了解到设备和服务器之间到底是怎么实现通讯的,数据的接收和解析是怎样做的。如果要完整理解这个过程可以去看下Blinker的库,上面这个代码用到的API在库里面都能看到函数原形,也能看到里面的数据是怎么处理的。不过这里就不往下讲了,内容比较多,感兴趣的同学自己去看代码吧。
6 运行测试
通过串口打印的log可以看到esp8266的运行情况。
大致的过程是这样的:启动之后先是连接wifi,然后通过HTTP向服务器获取连接MQTT所需的一些账户信息。然后是通过MQTT连接上服务器,至此初始化完成。
如果中途出现什么错误,可以通过查看log查找失败的原因。
打开手机Blinker APP,可以看到这个设备的状态是 “在线”
,在手机APP上点击 “点我开关灯”
按键,可以看到LED灯的状态会翻转,APP和串口也会输出相应的log。
点击 “点我计数”
按键,可以看到APP和串口都会输出相应的log。
至此,整个测试流程就完成了。
上面点灯和按键的功能其实都是自定义的,从APP显示的log或者MCU串口输出的log都可以看到,所谓的点灯命令和按键计数都只是发送了一条json格式的数据。比如这个按键功能,就是发了一条{"num-abc":{"val":1}}数据,当服务器和MCU都把val当成是计数次数的时候,它的含义就是计数,而实际上我们也可以把这个数据改成其他功能或者增添修改更多的命令,只要保证服务器和MCU双方的协议一致即可。
结束语
好了,关于如何基于esp8266实现手机APP控制LED的编程和使用方法就讲到这里,其实这只是其中一种方式,我们还可以通过http或者tcp等方式来实现网络通讯,也不局限于控制LED点灯,我们也可以控制多种灯,或者其他外设。只要数据的传输通了,我们就可以自定义很多命令和功能。
时间关系我这里就讲这么多,后续有时间的话我会考虑再介绍一下其他的方式。
想了解更多Arduino的内容,可以关注一下博主,后续我还会继续分享更多的经验给大家。
esp8266基于Arduino的开发教程汇总:
https://blog.csdn.net/ShenZhen_zixian/article/details/121659482
还有什么问题的话,欢迎在评论区留言。
如果这篇文章能够帮到你,就…你懂得。
Arduino应用开发——手机APP控制LED相关推荐
- 通过LY-WIFI-1智能WiFi模块实现手机APP控制LED灯————uno端
uno端 android端完成后,开始实现uno端,主要工作就是接板子和上传代码到单片机.在编写代码前,我们先来了解一下wifi传感器的常用命令 1.wifi传感器常用AT指令 2.针脚接线 1.wi ...
- 最简单DIY基于ESP8266的智能彩灯③(在网页用按钮+滑动条+手机APP控制RGB灯)
ESP8266和ESP32智能彩灯开发系列文章目录 第一篇:最简单DIY基于ESP8266的智能彩灯①(在网页用按钮点亮普通RGB灯) 第二篇:最简单DIY基于ESP8266的智能彩灯②(在网页用按键 ...
- 通过手机App控制RGB调节灯带的亮度
通过手机App控制RGB调节灯带的亮度,Arduino.esp8266.RGB灯带.APP.Android **很久没有更新了,最近过年回家有空拿出来东西玩玩,花了半天的时间搞这个,主要实现的原理,通 ...
- stm32车联网监控源码_物联网DIY,STM32配合ESP8266,APP控制LED,可以绑定天猫精灵...
大家好,超子能力有限,技术不高,有什么错误的地方,欢迎批评指正.今天的文章不讲通信中的各种协议了,咱们做一个物联网入门的DIY程序设计,用意法半导体的STM32单片机配合ESP8266的WiFi模块, ...
- 阿里云IOT入门教程(三)阿里云IOT Studio自建手机App控制Wemos D1 Mini( ESP8266 )板载灯亮灭
阿里云IOT入门教程(一)阿里云IOT Studio自建手机App控制Wemos D1 Mini( ESP8266 )板载灯亮灭 概述 所需材料 Mqtt预备知识 hacklab端开发 * 硬件端上报 ...
- 智能灯控制页面用HTML编写,3分钟教你创建手机APP控制全彩智能灯泡应用,图形化编程!...
本帖最后由 bigfanofloT 于 2016-9-22 22:33 编辑 对,你没有看错!!!3分钟教你创建手机APP控制全彩智能灯泡应用,图形化编程,自动代码生成,麻麻再也不用担心我不会编程了, ...
- 基于51单片机的智能停车场管理车位引导系统红外检测无线蓝牙/WiFi手机APP控制设计
本系统由STC89C52单片机.(无线蓝牙/WIFI模块-可选).红外对管传感器.LCD1602液晶显示.LED指示灯及电源组成. 通过红外对管模块实时检测车位是否占用,车位分为1车位.2车位.3车位 ...
- 毕业设计——基于STM32单片机的绿植养护系统(物联网、智能家居、手机APP控制、自动监测土壤湿度)
本工程包括一下功能:1.环境温湿度监测 2.土壤湿度监测 3.环境可燃气体浓度监测 4.RTC万年历功能 5.数据的实时显示(OLED屏幕.手机app) 6.自动浇水模式.手动浇水模式 ①自动浇水:系 ...
- 语言做一个自动售货机软件_软件开发手机app系统软件高端定制做一个app软件要多少钱...
软件开发手机app系统软件高端定制-做一个app软件要多少钱 APP开发分原生APP开发和在线制作,我们来看下这两种都需要多少费用吧. 1.原生APP开发(定制开发) 互联网是个神奇的大网,大数据开发 ...
- 利用PHP语言开发手机app后台服务器的框架是什么?或者说开发流程是怎么样的?
最近正在做一个手机APP的服务端API开发,虽然是基于Ruby on Rails的,做的也不太专业,不过大致相通,希望能够给你一些启发. 首先,如果是比较简单的手机APP,例如新闻客户端这样的 不会涉 ...
最新文章
- 【Qt】在Qt中使用opencv,不要使用opencv创建窗口
- 通过修改注册表实现Windows 隐藏账户
- 关于hbase的read操作的深入研究 region到storefile过程
- PHP应对洪水般的恶意访问接口 访问冲击
- 基于java的网络爬虫框架(实现京东数据的爬取,并将插入数据库)
- Git 基础(八)—— Github 的使用(账号管理)
- SQL中FOR XML子句的各种用法,包括FOR XML字句的四种基本模式:AUTO模式、RAW模式、PATH模式和EXPLICIT模式...
- 白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(1)
- 新建github分支
- win10隐藏图标按钮消失的解决办法
- 货币的一种互联网体系架构
- 定制合成:热激发延迟荧光材料PPZ-3TPT、PPZ-4TPT、PPZ-DPS或PXZ-DPS、DMAC-DPS
- linux设置r语言环境,R语言 环境设置
- 怎么复制window上的内容到linux,怎样将文件从window系统复制到远程linux系统上
- python调用系统本地程序
- Python正则表达式(regular expression)简介-re模块
- Xilinx FIFO使用小结
- 怎么看电脑配置?电脑配置好不好?详细教程来了!
- 微信小程序地图组件错误 显示非洲问题
- cad看图软件怎么才能将JPG转换为CAD