发作品
标准版

ESP8266EX_QuickChatBox

2.1w
155
121
19
简介:基于ESP8266EX的在无线网络条件下的快捷回复设备项目,对android kotlin、esp8266 arduino 服务器python 等方面的综合使用
开源协议:GPL 3.0
创建时间:2023-01-04 20:45:23更新时间:2023-07-21 16:44:44

描述

项目导图:

 

aWwvLC22w0CWLM9EzGrxdYALYOrn5KUUHb7O9kmq.png

 

2023/7/21:请注意,由于插件更新迭代,您在复制该项目的过程中可能会出现诸多问题,这是正常的,若有无法解决的请与我联系一同解决(1638779636@qq.com),我在此处简要概述可能遇到的问题:

 

1.插件中无法找到2.0版本python项目管理器,由于插件不断更新,2.0版本的下载渠道已经无法找到,您可下载最新版本2.5。

 

2.python项目管理器2.5版本在创建项目后无法自动下载依赖库,表现为提示正在安装依赖库,可点击项目右侧库文件中仅有少数库,该问题会导致项目无法正常使用,解决方法: 在项目根目录找到下图文件并将该文件中的库一一进行下载安装:

 

 

注意:模块版本留空。

 

项目简介:

有时候会遇到特定的场所,比如学校,这种场所通常覆盖无线网络,一般情况不让带手机,那么如果在校外的A同学需要向在校内的B同学传递消息,而又不通过其他方式的情况下,那么我的设备就有用了,实际上也是因为这个原因我才做这个设备的,下面我会按照项目导图的顺序分别说明硬件、软件、服务器端。

 

硬件设备QucikChatBox :

硬件设备担任着客户端的角色,它同时也是信息的发送者和接收者,在对该设备进行初始化配置后,设备会自动连接网络并从服务器端拉取数据并进行处理。

 

A.实物图如下:

 

 

B.硬件构成:

 

1.充电管理与修改充电电流:

 

设备使用TC4056A作为锂电池的充电管理芯片,选择该芯片一是因为兼容TP4056,二是因为便宜。

在电路中,该芯片引脚PROG的接地电阻阻值改变充电电流,该电阻阻值在原理图中默认3K(充电电流400mA),建议该电阻阻值不大于4K,您可根据电阻与充电电流关系表自行改变充电速度.

图二右侧框内的LED为充电指示引脚,亮起代表充电中。

 

(电阻与充电电流关系表)

b7jmlEwMIdwS42oKNZbWb57M6Jzqce8tyrIMebzK.png

 

(TC4056A在原理图中位置)

QwX2R0fLUB8OIcdqw9DEmv3kFpqt6z8jKPKd9XLY.png

 

2.锂电池选型:

 

影响锂电池规格的主要有两个参数,一个是续航,我认为在空间允许的范围内越大越好。另一个放置电池的空间,这与设备外壳的预留空间有关,锂电池宽度取决于预留空间的宽度,锂电池的高则取决于四周螺丝孔柱的高。

预留区参数:高 <= 13mm 宽 <= 42mm

*选择锂电池时请不要超过该范围,我选择的锂电池规格803040-1000mAh作为参考.*

 

模型如下,红色框为预留区:

 

ZFS7fBBVAyFZtYyqP1O9QsFrKoTQC7nAU96DAdHK.png

 

3.OLED显示屏选型:中景园1.3寸OLED显示屏,tb关键字如下:

 

SWCuzFFkuV82fjwjqT2jDoUIZnwwfioOrkk5pMJz.png9GYNWz2JXPX9tvWXSEhYw0mAdiGCRzYLKMoQaT2t.jpeg

 

4.微动按钮:按钮定义如下:

 

  GPIO 状态触发 响应类型
按钮1 GPIO13 低电平触发 向上翻阅、返回
按钮2 GPIO14 低电平触发 确定
按钮3 GPIO12 低电平触发 向下翻阅、下一步

 

5.主控芯片 ESP8266EX :

 

选择主控芯片前,我要考虑在这个设备都要有什么功能,1.设备能连接wifi 、2.可以连接OLED显示屏、3.有足够的IO进行按键监测和LED状态显示、4.有ADC,可以检测电压,ESP8266满足这些要求,并且可以用Arduino快速开发,其次,该芯片的市面价格最低可以到2.5元、算上外围电路也只有3.5-4元左右(大概),价格较友好。

 

6.ADC获取锂电池电压 :

 

当锂电池电量不足,设备会在屏幕上显示电量不足用于提醒使用者充电,另外当向服务器请求数据时会将电压作为参数上传,在目前,该电压取的近似值与实际电压相差约0.1v,上传至服务器的电压会作为返回值给到对应账号的Anroid端QuickChatApp,详情请结合代码。

 

ESP8266 ADC 引脚具有10 位分辨率,可以获得值范围为 0  - 1023,因此要检测电压最大为4.2V的锂电池,需要建立ADC分压电路,原理图如下:

 

1xFB6OdoMO2nmJDBRmmQVNBTiWeKOnN1nx5LVRVE.png

 

6.充电指示灯与 状态指示灯:

 

上文的实物图中可以看到按钮下方有两个LED。

左侧为充电状态指示灯,当TypeC口有外部电源接入时,设备开始充电,该状态灯亮起,当电量满或者外部电源移除时为灭。

右侧则是状态指示灯,该灯连接到主控的GPIO2引脚,当上点电时该灯闪烁一次,其他情况我还没想好。

 

7.固件烧录说明:

 

这里要提一嘴Flash大小的问题,在原理图中我使用的是GD25Q32CSIG,这是我建议的合适Flash大小,其它较小的储存芯片请自行测试使用。

 

设备上预留了一排烧录孔,该烧录孔的定义已在旁边标出:

 

L6pgcwbWMQvTpLRadsJqAwJpQ4EB73bZIKTED1w2.png

 

烧录孔不能让设备与电脑直接相连进行烧录工作,因此我们需要准备一个串口转TTL烧录器,在这里使用的是我自己的烧录器,同时也是另一个开源项目 https://oshwhub.com/zhbaa/c340-chuan-kou-gong-ju,该烧录器的引脚定义与烧录孔相对应。

我们还需要了解一下ESP8266如何进行烧录,该芯片进行固件烧录的前提是GPIO0引脚在上电时为低电平(工作模式为高电平)。

 

1.首先我们需要下载Arduino 1.X版本,项目的硬件设备就是用Arduino进行编写的,请注意不要下载最新版2.X的Arduino。

第一种下载方式:点击蓝色字进入Arduino官网进行下载Arduino官网,在该界面向下翻阅,找到旧版本,如下所示进行下载和安装(安装我就不多说了):

 

2zuwXGs1vpDZPeiSUmaGyTFpwQLb4sKaHUb9t4WE.png

 

2.安装完成之后我们需要为Arduino安装ESP8266FS插件,设备的静态资源(例如html)通过该插件进行上传,在Arduino2.0版本中我暂时没找到版本安装该插件,这是我建议安装旧版本的原因。在项目的附件压缩包中找到ESP8266FS文件夹,将ESP8266FS文件夹整个移到你的Arduino安装目录的tools文件夹下:

 

S7L9tQdXADO0ut0QQ6nlQzP1rc441SePEwakz8Ia.png

 

otFozfY1zsMrZ9TNsJU5GteeHYLUyuHj6nK9lUtZ.png

 

3.打开Arduino,配置ESP8266开发环境,这一步参考博客 Arduino搭建Esp8266开发环境(两种方法)

 

4.添加依赖库,项目所用到的依赖库有两种,一种是可以在arduino管理库中直接搜索并安装的,另一种是需要通过zip进行导入的,它们的入口都在左上角的项目->加载库中:

先点击管理库,搜索并安装如下库,注意版本:

4H6Nk6h8KkXtPfg8yRvvUGDqUVFgKNg9we6UJpmc.png

gwz2henusVKvz64JAvF1uzh4vLzjnfvgkTMT3JGk.png

 

再点击添加ZIP库并选择压缩包导入,这两个zip库已上传至附件:

 

9BGbQYhNeyZ1Cb4oBuoZlDGpIW88S90wQiQu1ZYI.png

 

1.使用arduino打开QuickChatBox1.0V.ino文件,点击下图所示按钮进行程序验证:

 

piv6qMOIJbQ8wD6YUPeYwtGLlExG3SxXIm83RvFp.png

 

若验证成功则如下图所示:

 

2gacHaQN3Kj833fbaVXvysiM01r9tL6pEwKophxW.png

如果弹出红色报错,请参考上方的依赖库添加,看看是不是忘了哪个步骤。

 

2.将数据线与烧录器进行连接,将烧录器上的GPIO0引脚电平切换开关置于GND一侧,数据线另一端先不插入电脑。

 

ed0P7kj8YWlO3bHA10rHaAP26QmGFU1VW5rRkbH1.jpeg

 

3.将烧录器插入设备的烧录孔后把另一端的USB插入电脑,注意引脚不能插反:

 

oaWgdH5YBZEsRzp9YUJN5n1GyMXnrSgVclaDnzfg.jpeg

 

4.此时电脑检测到新设备,打开Arduino左上角的工具按钮,在下方的端口处选择烧录器的串口,不确定是哪个的可以多次插拔看看哪个端口在变化,参数参考如下图:

 

605z9DtQsZgpcMDORpU1lkOErxaTAUuM2ebCfFaK.jpeg

 

5.向flash上传静态资源,设备初始化阶段会向外广播AP,使用者通过连接该AP访问ip地址在网页端进行初始化配置,网页的静态资源则通过ESP 8266FS 插件上传,设备缺少该文件无法正常工作,参考上图找到 ESP8266 Sketch Data Upload 并点击,此时开始上传静态资源,状态如下所示:

 

正在上传中:

 

 

上传成功:

 

 

6.静态资源上传成功后再进行固件上传,此时重新插拔USB(整个烧录过程中烧录器需要一直顶在烧录孔上),然后点击上传按钮,等待固件上传。

 

 

7.固件上传完成,拔掉USB,将烧录器的切换开关置为3v3,重新插入USB,设备界面如下图所示则视为烧录成功:

 

 

C.如何使用硬件设备:

 

1.进入配置模式,若设备未进行初始化配置则自启动AP模式,使用者访问192.168.4.1进行初始化配置,手动进入模式请在关机状态下按住中间按键并启动,演示:

 

 

2.连接设备热点并使用浏览器访问 http://192.168.4.1 进行初始化配置,演示如下:

 

 

参数说明:

 

无线网络名称和密码,保存后重启,设备自动搜寻该wifi并连接。

设备密钥,通过软件端进行获取,请参考下文的软件说明。

服务器地址,文章最后提供了一个公共服务器,在此处填写该服务器地址,请注意最后以 / 结尾,关于服务器的私有搭建请参考下文服务器端搭建教程。

 

3.确认无误点击保存配置并重启,设备自动重启并搜寻初始化配置中的网络且自动连接,在连接成功后则可进行正常使用,如何使用请参考下方的视频,在视频中,我将演示服务器的配置以及通过邮箱进行登录,我准备了两个账号进行好友的申请、互发信息、设备端的发信收信和相关配置的上传、同步,个人有点社恐,所以视频就不说话了。

 

演示视频

 

QucikChatAPP(Android端软件程序)

 

软件程序作为客户端,除了拥有与设备一样的功能外,还可以对设备的各项功能、参数进行修改保存,显示设备电量等等,软件使用AndroidStudio+Kotlin进行开发,对安卓系统版本6以上的手机提供支持,更低的系统版本的可用性未经测试。

在软件中,我引用了一些开源库,下面我只对okhttp进行说明,其他开源库的作用请自行查阅代码:

 

网络请求框架OkHttp3,软件中使用该框架与服务器进行交互,目前与服务器交互的操作方法都放置在UserBb类中,在该类中,我定义了所有与服务器交互的方法,包括但不限于获取验证码、申请添加好友、取消添加好友、拒绝好友申请、向好友发信,而这些方法大同小异,在该类中定义方法 getOkHttpGetCall ,该方法接收String格式的get请求连接,返回Call对象:

 

0g2gR0Q6OdSJxq49Cm9fBhpxyVe6h7XXSAAAC6DI.png

 

在与服务器交互的方法中,都需要调用getOkHttpGetCall获取call对象,在回调中对服务器返回的数据进行解析处理,以向好友发送为例:

 

cxArcYk1Pe2oQVNoJPylu7xt8yV5gKgMHoQrnNwp.png

 

应用功能:

 

1.设置服务器:

 

在写这个项目的时候,我构想的是服务器私有部署化,这样就更需要把设置服务器功能单独拿出来。

安装软件,打开软件之后是如下的界面,如果您自行部署了服务器,请点击右下角的“设置服务器”对服务器进行修改。

 

LQItDr4QLtogPFxrhTF3EYpBls7fext7Nvtbiie6.jpeg

 

2.登录或注册账户:参考上面的Login to server界面,在邮箱一栏填写能够接收到验证码的邮箱,点击获取验证码,若服务器地址正确很快验证码就会发送到你的邮箱,微信接受邮件效果:

 

0RvbalwuMmlXHDSb5C2YW4ZNirY6vo6P4Fx2EWbo.jpeg

 

输入验证码后点击登录或注册并登录按钮,如果邮箱在这个服务器上没有注册过,服务器将自动注册,若存在该邮箱则正常登录,成功后跳转至主界面 MainActivity ,登陆部分完毕。

 

3.注销账户:注销账户是指删除在该服务器上的关于该账户的所有数据,包括但不限于用户表、作为发送者的所有聊天数据、从所有好友的好友列表中移除、清除DKey、UserKey等一切关于该账户的数据,注销成功后跳转至登陆界面,该按钮在如下图所示右上角区域。

 

IX47r8D5780BylEgeLhYIWK8fYeD9dr2tj81rV4s.jpeg

 

4.数据轮询间隔:数据轮询就是定期向服务器申请最新数据并将其展示出来,在MainActivity界面中,好友的申请信息、未读消息、设备状态、参数等需要不断刷新的数据,这些都需要数据轮询,您可以自定义该轮询的间隔,默认为3秒,如果您服务器的交互速度快可以适当降低该值,若服务器速度慢且刷新间隔短,或导致软件闪退,一般情况3s就OK。

 

64rS3z84vE3A37AKYtC5C4VCZocM6qtQNP9kiRhc.jpeg

 

5.收到消息时向邮箱发信:

当收到好友消息时并不会通过系统弹窗进行提示,这个功能也是由于时间关系暂时简化了,替代方案就是当好友向你发送消息时,服务器会通过邮箱向你的邮箱发信进行提醒,目前该提醒无间隔,意思就是好友发多少条消息就提醒多少次,后面我会增加提醒间隔,格式如下:

 

sYS8OT2C8V4Cy7hKTG1HZkrXusUD5UXSrN6PltPF.jpeg

 

6.修改硬件设备参数:

 

在我的使用情境中,可能出现以下几种情况:

 

1.设备对设备进行消息交互

2.设备对手机进行消息交互

3.手机对手机进行消息交互

 

这个项目主要针对上面的1、2种情况,第三种就不做讨论了,两个人都有手机了还用这个干什么,下面我会对软件段进行设备参数修改进行说明。

 

首先要了解一个名词:DKey -> DeviceKey 设备的唯一密钥,每个账户都拥有一个DKey,当对设备进行初始化时DKey是必填项,若设备无此参数,则无法访问服务器。DKey是唯一的,请确保只有自己知晓DKey。DKey可以被重置,当你重置DKey后旧的DKey会被删除,服务器会重新生成新的DKey并返回,而旧DKey的参数会被保留下来,如快捷回复列表、附加网络配置等。

 

快捷回复列表:上面说明过设备的结构,它只有三个按钮进行操控以完成上翻、下翻、确定等逻辑功能,就目前而言,设备无法进行拼音输入等功能,即使实现也会变得很麻烦,所以我采用的是预填充内容方案,通过软件将想要回复的消息内容上传至服务器,设备再访问服务器同步该回复消息的数据列表以作为回复项,硬限制:每条最多50字,最多200条。

 

附加网络配置:整个硬件设备的构建以来的就是它的可以进行WIFI通信,这就会产生一个弊端,倘若我换了一个环境,由于设备性质又无法手动更换网络,那么该怎么办,解决这个问题的就是附加网络配置功能,通过软件将固定的地点的WIFI账号密码进行服务器上传,再让设备访问服务器进行保存,设备开机后会搜寻附近中是否存在已保存的WIFI数据,若存在则自动连接。

 

cSeaEUZbpzxyDzfBqjkFl1Y2hszQk5AcNkfjsDbO.jpeg

 

7.好友管理:我分三个状态进行说明

 

A.发出好友申请,作为申请人可以使用添加好友功能,通过对方的邮箱向对方发出好友申请,此时处于等待对方同意或拒绝状态,申请人状态如下图所示,您可在此时取消该申请:

 

 

B.等待被申请人同意或拒绝该好友申请:作为被申请人接收到来自其他用户的申请,界面如下所示,在此时可以可以选择同意或拒绝该用户的好友申请,若同意则成为好友,显示在好友列表中,拒绝则显示如C所示:

 

 

C.作为申请者的好友申请被拒绝,则显示如下界面,此时可点击了解,则该Item被删除:

 

 

8.与好友的信息交互:在与其他用户成为好友后,软件会将好友显示在消息列表中,如下图所示:

 

 

马赛克掉的是邮箱号,右侧的是在线状态,此时显示暂无消息,说明好友没有新的消息传来,对于好友的消息新旧的状态判断请自行查看代码。

 

点击View进入与该好友的消息界面,以app 1.0V 为例,界面组成如下:

 

 

 

 

搭建服务器端(QuickChat Server): 

 

客户端的数据都要经由服务器进行保存、处理、下发,在文章末尾我会提供一个公共的服务器地址以供进行可通性测试,但受限于经济、安全、维护等原因,我不保证该服务器能够长久有效开放,因此建议您搭建自己的服务器。在这里我以华为云为例进行搭建,您也可以选择其他的云服务器厂商,比如阿里、腾讯,它们都有免费体验服务器一个月之类的活动,这里选择华为云是因为其它的都被我白嫖完了。

 

1.购买服务器: https://activity.huaweicloud.com/free_test/index.html

下翻页面可以看到有不同规格的服务器,这里选择最低配的1核1G就够用了,不过既然是免费的也可选择更高配。

 

 

点击0元试用按钮进行购买,在购买页面中需要注意的是镜像,请按下图进行配置:

其他配置项默认即可。

 

 

2.点击右上角控制台: 购买服务器成功后点击右上角的控制台

 

 

3.在左侧的总览菜单中找到弹性云服务器ECS并点击:

 

 

4.此时应该能看到我们刚才新创建的服务器实例,根据华为云的规定,新创建实例需要重置密码,点击右侧更多->重置密码(不要忘记勾选自动重启):

 

 

5.点击远程登录,此时会弹出一个界面用于选择登陆方式,这里我们选择第一种 "CloudShell登录":

 

 

6:点击连接按钮登录CloudShell,跳转至如下所示界面:

 

 

7.安装宝塔面板,点击蓝字跳转至宝塔官网

 

找到下图中界面并点击右侧复制:

 

 

等待一段时间后弹出 Do you want to install Bt-Panel to the /www directory now?(y/n):

这里选择y并回车,若后续还有询问项,同样输入y并回车.

 

 

8.等待宝塔安装,当出现如下数据,则安装完成:

 

妥善保存如下信息,我们后续的操作都在宝塔面板上进行。

 

 

9.对外网面板地址进行访问,此时大概率是无法访问的,查看上图的黄字,无法访问的原因就是服务器没有开放该端口,在此示例中是23829,请以实际为准,我们需要在安全组中开放该端口,操作如下:

 

首先打开实例的详细界面:

 

 

再说一下,在您实际操作时该端口不一定是我示例中的23829,具体要看步骤8的图片中数据。

开放端口后再次访问外网面板地址,正常会出现如下界面,密码账号请参照步骤8中的username,password:

 

 

10.安装服务器所需依赖程序,请按照图片内版本下载:

 

 

所有软件均选择极速安装

 

 

11.当所有软件安装完成,点击Python项目管理器右侧的设置:

 

 

点击左侧的版本管理,安装python3.7.9:

 

 

12.创建数据库: 点击宝塔左侧的数据库,再点击添加数据库,数据库参数如下所示,用户名和密码可进行自定义,其他请与图保持一致:

 

068elivlVlex3yjZGA6IrWj0F0yrnuHAXNoEfLsL.png

 

点击提交后数据库创建完成,再次点击该数据库右侧的管理按钮进入phpMyAdmin导入模板数据库:

用户名、密码与数据库对应:

 

 

 

 

 

 

创建站点,点击宝塔右侧网站按钮,再点击添加站点: 请注意箭头所指的IP需要改成自己服务器的外网ip,域名一行是ip+端口,请在安全组中放行8000端口。

 


此时站点中应该有你新建的网站:

 

 

以我的为例,访问http://139.9.90.194:8000可看到如下所示,则站点创建成功,若无法访问请检查端口是否放行,创建站点时参数是否填写错误:

 

 

点击网站右侧的配置修改配置文件,将下面的代码复制到指定位置并保存:

PS:这里本应该有图片告诉你代码复制到哪个位置,但死活不显示 我已经没办法了。。。。

用文字说明:将下面代码复制到配置文件的第五行 root的下一行。

 

location / {
       include uwsgi_params;
       uwsgi_pass 0.0.0.0:8000;  #端口要和uwsgi里配置的一样
       uwsgi_param UWSGI_SCRIPT DJ_QuickChatServer.wsgi;  #wsgi.py所在的目录名+.wsgi
       uwsgi_param UWSGI_CHDIR /www/wwwroot/quickchatserver; #项目路径
    }
      location /static/ {
      alias /www/wwwroot/quickchatserverstatic/; #静态资源路径
      }




进入站点根目录,将根目录所有文件删除:
点击上传,将DJ_QuickChatServer.zip上传至根目录后右键进行解压,解压后如图所示:

进入如下图所示目录,找到settings.py,在约80行的位置修改参数为你的数据库参数:

 

 

邮箱管理者:我们接收的验证码和消息提醒都是通过这个邮箱管理者实现的,它负责服务器中所有邮件的收发,在搭建服务器后,您必须修改服务器中的EmailSender.py文件中的全局参数,如下所示:

 

tFQTemvO2QeFLMrtZJT72ChvoFMJ1d2upKu0VpNz.png

 

可以看到其实质就是依托于第三方邮箱的smtp服务,因此你需要申请到一个邮箱并开启smtp,请参考https://blog.csdn.net/liuyuinsdu/article/details/113878840

 

 

 

等待很长时间后安装完成:

1.点击模块手动安装Django:

2.安装完成后点击运行中停止项目,如上图绿色箭头所示。

3.点击配置适当增大进程线程:
参考博客:uwsgi开多少进程才能最大使用服务器


我的配置如下:



4.重新启动项目

 

到此服务器端的配置全部完成,请参考上方的软件说明,在软件端进行服务器配置后尝试登录,能够收到验证码证明服务器端正常运行。

公共测试服务器:已过期

项目资源 https://www.aliyundrive.com/s/U5wzHk67JQX



在不使用设备时请关闭电源,避免电池过放。

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
蓝奏云资源储存.txt
103
2
QuickChat1.0v.apk
79
克隆工程
分享
0
0
添加到专辑
侵权投诉
工程成员
全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
换一批