ESP8266远程控制电子门

最前面介绍:

这是一个使用ESP8266 联网控制继电器,实现手机远程控制电子门,打开关闭,开关一次的物联网联手小项目

附git地址:https://github.com/YaronWong/ESP8266RemoteControl

三个周末,学习了下ESP8266 基础使用,做了个小玩具

​ 实现手机端控制电子大门的开关,再也不用担心没带钥匙进不去大门了 (掩面)

​ 使用场景:电子门支持红外遥控器,有时忘记遥控或门禁卡,只能呼叫同事开门,遂想把遥控开关放到手机里面

结构图说明:

看不清可以右键存下来看大图

软硬说明:

​ 硬件:ESP8266 主板,控制继电器,继电器连接红外遥控器

​ 前端:Flutter 搭的Demo (前后用了半天,页面太粗)

​ 后端:接口使用 FastAPI +Python ,数据库:MySql

逻辑说明:

ESP8266 主要功能在door.ino 文件

​ setup() 主要做 连接wifi初始化

​ loop() 函数循环请求服务器,查询最新一条命令,如果命令状态为1,表述需要执行,按照命令执行,执行完毕,更新数据状态为0,

​ 执行命令依赖字段ACTION_NAME, 如A 则执行A 命令,A命令对应设置 A引脚低电平,等待200毫秒后,重置高电平

​ 命令ABCD 和引脚的对应关系参见 ,

  1. const uint8_t PORT_A = D1; // 对应引脚
  2. const uint8_t PORT_B = D2; //
  3. const uint8_t PORT_C = D6; //
  4. const uint8_t PORT_D = D7; //`

​ 服务端,使用FastApi 搭建三个接口,使用Docker部署

  • addnasdaq 新建命令,客户端调用,新增一条命令
  • querylast 查询最新一条命令,ESP8266查询是否有命令指定调用
  • updatenasdaq 更新指定命令状态 ,ESP8266执行完毕命令调用

数据库使用MySql,数据库地址和参数在请 DbConfig.py文件配置

以上介绍完毕,如果你还想动手试试,参照一下步骤

前提说明:

​ 如果要想将此教程跑起来,需要一些预备知识:

  1. 了解ESP8266 开发环境搭建,基础的开发和上传步骤

    需要修改参数,调整wifi信息,服务器地址

    在此推荐太极创客 的基础教程,我看教程2个周末完成Esp部分。

    物联网基础教程ESP8266物联网教程

  2. 了解Docker基础,参照教程可以运行实例

    需要设置MySql地址和服务器地址

    Docker教程参见B站教程

    FastAPI 部署教程

  3. AndroidStudio使用,可以运行Flutter项目,也可以下载打包好的项目

    项目源码包含客户端源码,我运行过Android,未测试IOS,代码很简单,了解Dart基础语法就可以修改

    Flutter教程

如何使用

准备材料:

  • 无线遥控器,支持学习和对拷贝,
  • ESP8266 主板
  • 3.3V四路继电器
  • 电源,这里使用3节1.5V 电池替代
  • 工具类,电烙铁,万能表,焊锡丝,热熔枪,
  • 服务器(之前就有),如果使用三方服务,请跳过
  • 耐心
遥控器改造

我是使用ESP8266控制遥控器,需要对遥控器改造

将 遥控器 ABCD 开关分别使用电烙铁 ,焊接处四条引线,后续接入 继电器

其中,负极接地是通用一根,参考图:

如果接其他控制器,请参照类似方式,其实就是使用继电器将原本开关短路

ESP8266环境搭建

​ esp8266端代码在muc目录,door.ino

​ 这里我参考的太极创客教程,物联网硬件开发0基础,学了两个周末,十分推荐,表示感谢

​ 再次贴一下地址ESP8266开发环境搭建教程地址

​ 准备好环境,跑一下示例中的Blink代码,正常运行就表述环境搭建成功

​ 在ESP8266 可以运行Demo后,可以导入door.ino文件,修改配置

​ 注意需要修改的位置:

  • wifi账号密码

    const char *ssid = "your_wifi_name"; // 需要连接到的WiFi名

    const char *password = "88888888"; // 连接的WiFi密码

  • 服务器地址和端口

    const char *host = "101.xx.xxx.xxx";

    const int httpPort = 8000;

补充1:

第一次解除物联硬件开发,C++现学现卖,写起来很慢,也不规范,

另外就是ESP8266的网路库,我开始想使用HTTPClient库,网络请求回来一直重启,查资料说可能是电压不稳,多次尝试无法修复,改用了WiFiClient库,

WiFiClient库写起来,需要拼接header和body,第一次差点崩溃,不知道哪里缺少个空格或者回车,后来想到一个办法

先把服务端搭起来,使用FastAPI的 测试接口进行测试,使用Charles抓包,Charles可以明显的看出Header和body格式,方便拼接。

也可能是我使用不熟,有更好些GET和POST的方案,有的话欢迎告知,

补充2

编写过程,开始使用Arduino,不支持连提示和格式化,对于用IDEA快捷键的人着实不习惯,后来配置了VS环境

ESP8266连接继电器和红外开关

​ 使用面包线用继电器将ESP8266和红外开关如图连接

​ 注意ESP8266开发期间使用USB供电,输出3.3V给继电器供电,继电器接收到ESP8266的低电平会将两个触电短路,达到开关闭合的效果

​ 将继电器负极并联,四路输出如图连接开关四个开关,注意连接是常闭的两个接口,不确定哪两个常闭就用万能表测试下

​ 注:连接完毕之后,可以使用door.ino代码进行测试,看是否可以实现继电器的控制,如果控制正确,再使用网络请求

服务器部署

​ 服务端代码可以直接Docker部署到服务器,也可以本地部署,局域网测试

​ 服务端代码目录在 services目录

​ 注意需要修改的地方:

​ MySql 地址和 端口,

  1. ipname = "101.xxx.xxx.xxx"
  2. duankou = 3306
  3. DB_NAME = "db_name"
  4. userName = "userName"
  5. pwd = "pwd"

​ 数据库初始化文件:nasdaq.sql

FastAPI本地部署:

​ 项目services目录导入到Pycharm,直接运行,

FastAPI服务端部署

参见Docker部署FastAPI

客户端打包

​ 客户端采用Flutter方案,目前就1个接口请求,我不想些两端代码(懒-_-!!)

​ 配置好AndroidStudio的Flutter开发环境,直接导入就可以,配置教程可以参见搭建Flutter开发环境

​ 需要修改对应的服务器地址:post('http://101.xxx.xxx.xxx:8000/addnasdaq',

测试:
  1. 先测试ESP8266连接WIFI是否正常
  2. 测试ESP8266单独控制继电器是否正常
  3. 本地部署服务器,使用PostMan接口测试数据库 增加,查询是否正常
  4. 测试ESP8266 连接数据是否正常
  5. 如果到此测试正常,标识项目正常运行

项目声明:此项目是学习练手项目,仅用于个人学习,

刚接触物联网硬件,项目中难免有不规范的地方,仅供学习,欢迎大家贡献代码

目前已经实现的功能

  • 支持远程控制
  • 支持 四个按键控制,可以扩展
  • 支持Android / IOS 两端客户端 Flutter实现,界面待优化

TODO

  • wifi连接配置

  • 按键自定义配置

  • 接口优化,目前是Json有点大,待优化

  • 自动化部署

  • 教程优化

ESP8266远程控制电子门的更多相关文章

  1. Windows 10的TPM模块到底是不是美国全球监控体系的奠基石?

    http://bbs.pediy.com/showthread.php?t=202638 http://www.zhihu.com/topic/19671262/newest 2015年3月18日,微 ...

  2. 初探APT攻击

    首发于i春秋 作者:joe     所属团队:Arctic Shell 团队博客地址:https://www.cnblogs.com/anbus/   0x1:关于APT的相关介绍:     APT是 ...

  3. 初探APT 攻击

    作者:joe       所属团队:Arctic Shell 本文编写参考: https://www.freebuf.com/vuls/175280.html https://www.freebuf. ...

  4. google在nature上发表的关于量子计算机的论文(Quantum supremacy using a programmable superconducting processor 译)— 附论文

    Google 2019年10月23号发表在Nature(<自然><科学>及<细胞>杂志都是国际顶级期刊,貌似在上面发文两篇,就可以评院士了)上,关于量子计算(基于 ...

  5. 微信、QQ、新浪微博等第三方登录,你想知道的都在这了(上) 微信、QQ、新浪微博等第三方登录,你想知道的都在这了(下)

    微信.QQ.新浪微博等第三方登录,你想知道的都在这了(上):https://www.jianshu.com/p/133d84042483 微信.QQ.新浪微博等第三方登录,你想知道的都在这了(下):h ...

  6. Android+ESP8266+路由器实现远程控制(基于花生壳域名方式访问)

    x先说一下实现的功能,其实就是远程控制 和这篇文章的控制  http://www.cnblogs.com/yangfengwu/p/5295632.html   应该说是这篇文章的升级,解决这篇文章由 ...

  7. (一)基于阿里云的MQTT远程控制(Android 连接MQTT服务器,ESP8266连接MQTT服务器实现远程通信控制----简单的连接通信)

    如果不了解MQTT的可以看这篇文章  http://www.cnblogs.com/yangfengwu/p/7764667.html http://www.cnblogs.com/yangfengw ...

  8. esp8266 + dht11 + 两路继电器 实现pc远程控制开关机温度监控.并配置zabbix监控

    事因:翻了翻自己之前的硬件小箱子,几年前买的一些小东西,想用用起来. 正好我有些数据放在机器上,有时候需要机器启动,我使用完成后在断开. 其实网络唤醒也能做到,但是机器一直给电也不好,在说家里有小孩A ...

  9. Arduino UNO +ESP8266采集数据上传到贝壳网

    集成电路设计大赛赛程将至,我现在还是毫无头绪,然后又报了一个互联网+,比赛报了,东西就必须出来,时间很紧的情况下,所以选择了开源的arduino的进行完成.从开始接触Arduino到完成工程,前前后后 ...

随机推荐

  1. Python读文件并写入数组

    直接上代码: # 读文件 def get_venue(file): fname = file # 文件名 # 获取数据长度 len = 0 with open(fname, 'r+', encodin ...

  2. 【uniapp 开发】日期工具类 -- DateUtil

    日期格式转毫秒值 var time = '2019-08-08 12:09:34'; var time222 = time.replace("-", "/"). ...

  3. [ Shell ] 通过 Shell 脚本导出 CDL 网表

    https://www.cnblogs.com/yeungchie/ 通过 si 导出电路网表,实际上在 Virtuoso 中通过 export - cdl 和 Calibre LVS 的步骤中也是通 ...

  4. Java类型转换详解

    Java类型转换详解 最近有同学问:自动类型转换老是记不住,到底是大转小,还是小转大 其实这个不用死记硬背,很好理解,我们拿 int 和 short 来举例: int 是 4 字节,也就是 32 bi ...

  5. vue项目中连接MySQL时,报错ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password:YES)

    一.前言 我们前端很多时候在写vue项目的时候,会把后端的数据拿到本地来跑,在连接MySQL数据库的时候,可能出现一些问题,如: ER_ACCESS_DENIED_ERROR: Access deni ...

  6. eclipse 下 SpringBoot 工程使用Maven打包

    eclipse 下 SpringBoot 工程使用Maven打包 1. pom.xml 添加打包配置 点击查看代码 <!-- 打包使用 --> <build> <plug ...

  7. Markdown基础语法规则

    你好,世界.粗体,斜体,测试,弟弟,H2O 论文题目 一级标题 二级标题 三级标题 1 2 3 点击此链接打开网址 公式 \(y = \sin x\) \[ y = \frac{1}{x} \] dd ...

  8. Java学习day10

    在类内定义的类就称为内部类.内部类可以访问外部类的所有成员,外部类要访问内部类,必须先建立对象 内部类分为成员内部类和局部内部类 外界创建public修饰的成员内部类对象的格式:外部类名.内部类名 对 ...

  9. Java学习day26

    进程.多任务 1.例如吃饭的时候玩手机,边上厕所边玩手机,看似是同时做多个事情,本质上我们的大脑在同一时间只做了一件事情,这就是多任务 2.道路窄的时候容易造成拥堵,可以拓宽道路,加多车道,同一个方向 ...

  10. 【直播回顾】OpenHarmony知识赋能第四期第二课——GPIO驱动开发

    3月17日晚上19点,​知识赋能第四期直播的第二节课<OpenHarmony标准系统HDF框架之GPIO驱动开发>​,在OpenHarmony开发者成长计划社群内成功举办. 本期课程,由​ ...