黄土马家

ESP8266EX_QuickChatBox

 
Overview

项目导图:
 
 
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为充电指示引脚,亮起代表充电中。
 
(电阻与充电电流关系表)
 
(TC4056A在原理图中位置)
 
2.锂电池选型:
 
影响锂电池规格的主要有两个参数,一个是续航,我认为在空间允许的范围内越大越好。另一个放置电池的空间,这与设备外壳的预留空间有关,锂电池宽度取决于预留空间的宽度,锂电池的高则取决于四周螺丝孔柱的高。
预留区参数:高 <= 13mm 宽 <= 42mm
*选择锂电池时请不要超过该范围,我选择的锂电池规格803040-1000mAh作为参考.*
 
模型如下,红色框为预留区:
 
 
3.OLED显示屏选型:中景园1.3寸OLED显示屏,tb关键字如下:
 
 
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分压电路,原理图如下:
 
 
6.充电指示灯与 状态指示灯:
 
上文的实物图中可以看到按钮下方有两个LED。
左侧为充电状态指示灯,当TypeC口有外部电源接入时,设备开始充电,该状态灯亮起,当电量满或者外部电源移除时为灭。
右侧则是状态指示灯,该灯连接到主控的GPIO2引脚,当上点电时该灯闪烁一次,其他情况我还没想好。
 
7.固件烧录说明:
 
这里要提一嘴Flash大小的问题,在原理图中我使用的是GD25Q32CSIG,这是我建议的合适Flash大小,其它较小的储存芯片请自行测试使用。
 
设备上预留了一排烧录孔,该烧录孔的定义已在旁边标出:
 
 
烧录孔不能让设备与电脑直接相连进行烧录工作,因此我们需要准备一个串口转TTL烧录器,在这里使用的是我自己的烧录器,同时也是另一个开源项目 https://oshwhub.com/zhbaa/c340-chuan-kou-gong-ju,该烧录器的引脚定义与烧录孔相对应。
我们还需要了解一下ESP8266如何进行烧录,该芯片进行固件烧录的前提是GPIO0引脚在上电时为低电平(工作模式为高电平)。
 
1.首先我们需要下载Arduino 1.X版本,项目的硬件设备就是用Arduino进行编写的,请注意不要下载最新版2.X的Arduino。
第一种下载方式:点击蓝色字进入Arduino官网进行下载Arduino官网,在该界面向下翻阅,找到旧版本,如下所示进行下载和安装(安装我就不多说了):
 
 
2.安装完成之后我们需要为Arduino安装ESP8266FS插件,设备的静态资源(例如html)通过该插件进行上传,在Arduino2.0版本中我暂时没找到版本安装该插件,这是我建议安装旧版本的原因。在项目的附件压缩包中找到ESP8266FS文件夹,将ESP8266FS文件夹整个移到你的Arduino安装目录的tools文件夹下:
 
 
 
3.打开Arduino,配置ESP8266开发环境,这一步参考博客 Arduino搭建Esp8266开发环境(两种方法)
 
4.添加依赖库,项目所用到的依赖库有两种,一种是可以在arduino管理库中直接搜索并安装的,另一种是需要通过zip进行导入的,它们的入口都在左上角的项目->加载库中:
先点击管理库,搜索并安装如下库,注意版本:
 
再点击添加ZIP库并选择压缩包导入,这两个zip库已上传至附件:
 
 
1.使用arduino打开QuickChatBox1.0V.ino文件,点击下图所示按钮进行程序验证:
 
 
若验证成功则如下图所示:
 
如果弹出红色报错,请参考上方的依赖库添加,看看是不是忘了哪个步骤。
 
2.将数据线与烧录器进行连接,将烧录器上的GPIO0引脚电平切换开关置于GND一侧,数据线另一端先不插入电脑。
 
 
3.将烧录器插入设备的烧录孔后把另一端的USB插入电脑,注意引脚不能插反:
 
 
4.此时电脑检测到新设备,打开Arduino左上角的工具按钮,在下方的端口处选择烧录器的串口,不确定是哪个的可以多次插拔看看哪个端口在变化,参数参考如下图:
 
 
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对象:
 
 
在与服务器交互的方法中,都需要调用getOkHttpGetCall获取call对象,在回调中对服务器返回的数据进行解析处理,以向好友发送为例:
 
 
应用功能:
 
1.设置服务器:
 
在写这个项目的时候,我构想的是服务器私有部署化,这样就更需要把设置服务器功能单独拿出来。
安装软件,打开软件之后是如下的界面,如果您自行部署了服务器,请点击右下角的“设置服务器”对服务器进行修改。
 
 
2.登录或注册账户:参考上面的Login to server界面,在邮箱一栏填写能够接收到验证码的邮箱,点击获取验证码,若服务器地址正确很快验证码就会发送到你的邮箱,微信接受邮件效果:
 
 
输入验证码后点击登录或注册并登录按钮,如果邮箱在这个服务器上没有注册过,服务器将自动注册,若存在该邮箱则正常登录,成功后跳转至主界面 MainActivity ,登陆部分完毕。
 
3.注销账户:注销账户是指删除在该服务器上的关于该账户的所有数据,包括但不限于用户表、作为发送者的所有聊天数据、从所有好友的好友列表中移除、清除DKey、UserKey等一切关于该账户的数据,注销成功后跳转至登陆界面,该按钮在如下图所示右上角区域。
 
 
4.数据轮询间隔:数据轮询就是定期向服务器申请最新数据并将其展示出来,在MainActivity界面中,好友的申请信息、未读消息、设备状态、参数等需要不断刷新的数据,这些都需要数据轮询,您可以自定义该轮询的间隔,默认为3秒,如果您服务器的交互速度快可以适当降低该值,若服务器速度慢且刷新间隔短,或导致软件闪退,一般情况3s就OK。
 
 
5.收到消息时向邮箱发信:
当收到好友消息时并不会通过系统弹窗进行提示,这个功能也是由于时间关系暂时简化了,替代方案就是当好友向你发送消息时,服务器会通过邮箱向你的邮箱发信进行提醒,目前该提醒无间隔,意思就是好友发多少条消息就提醒多少次,后面我会增加提醒间隔,格式如下:
 
 
6.修改硬件设备参数:
 
在我的使用情境中,可能出现以下几种情况:
 
1.设备对设备进行消息交互
2.设备对手机进行消息交互
3.手机对手机进行消息交互
 
这个项目主要针对上面的1、2种情况,第三种就不做讨论了,两个人都有手机了还用这个干什么,下面我会对软件段进行设备参数修改进行说明。
 
首先要了解一个名词:DKey -> DeviceKey 设备的唯一密钥,每个账户都拥有一个DKey,当对设备进行初始化时DKey是必填项,若设备无此参数,则无法访问服务器。DKey是唯一的,请确保只有自己知晓DKey。DKey可以被重置,当你重置DKey后旧的DKey会被删除,服务器会重新生成新的DKey并返回,而旧DKey的参数会被保留下来,如快捷回复列表、附加网络配置等。
 
快捷回复列表:上面说明过设备的结构,它只有三个按钮进行操控以完成上翻、下翻、确定等逻辑功能,就目前而言,设备无法进行拼音输入等功能,即使实现也会变得很麻烦,所以我采用的是预填充内容方案,通过软件将想要回复的消息内容上传至服务器,设备再访问服务器同步该回复消息的数据列表以作为回复项,硬限制:每条最多50字,最多200条。
 
附加网络配置:整个硬件设备的构建以来的就是它的可以进行WIFI通信,这就会产生一个弊端,倘若我换了一个环境,由于设备性质又无法手动更换网络,那么该怎么办,解决这个问题的就是附加网络配置功能,通过软件将固定的地点的WIFI账号密码进行服务器上传,再让设备访问服务器进行保存,设备开机后会搜寻附近中是否存在已保存的WIFI数据,若存在则自动连接。
 
 
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.创建数据库: 点击宝塔左侧的数据库,再点击添加数据库,数据库参数如下所示,用户名和密码可进行自定义,其他请与图保持一致:
 
 
点击提交后数据库创建完成,再次点击该数据库右侧的管理按钮进入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文件中的全局参数,如下所示:
 
 
可以看到其实质就是依托于第三方邮箱的smtp服务,因此你需要申请到一个邮箱并开启smtp,请参考https://blog.csdn.net/liuyuinsdu/article/details/113878840
 
 
 
等待很长时间后安装完成:1.点击模块手动安装Django:2.安装完成后点击运行中停止项目,如上图绿色箭头所示。3.点击配置适当增大进程线程:参考博客:uwsgi开多少进程才能最大使用服务器我的配置如下:4.重新启动项目
 
到此服务器端的配置全部完成,请参考上方的软件说明,在软件端进行服务器配置后尝试登录,能够收到验证码证明服务器端正常运行。
公共测试服务器:已过期项目资源 https://www.aliyundrive.com/s/U5wzHk67JQX在不使用设备时请关闭电源,避免电池过放。
参考设计图片
×
 
 
Search Datasheet?

Supported by EEWorld Datasheet

Forum More
Update:2024-11-22 12:02:01

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号