本文作者:立创开源硬件平台 OSHWHub 用户@zhbaa,禁止商用,未经许可禁止转载,点击查看原文章
1.工程描述
本文会对:硬件设计、软件设计、服务器端搭建进行详细教学。
2.硬件部分
首先,我需要介绍这个硬件设备——QucikChatBox 。
它担任着客户端的角色,它同时也是信息的发送者和接收者,在对该设备进行初始化配置后,设备会自动连接网络并从服务器端拉取数据并进行处理。
硬件设计说明
01.指示灯
上文的实物图中可以看,按钮下方有两个LED。
左侧为充电状态指示灯,当TypeC口有外部电源接入时,设备开始充电,该状态灯亮起,当电量满或者外部电源移除时为灭。
右侧则是状态指示灯,该灯连接到主控的GPIO2引脚,当上点电时该灯闪烁一次,其他情况我还没想好。
02.充电管理与修改充电电流
设备使用TC4056A作为锂电池的充电管理芯片,选择该芯片一是因为兼容TP4056,二是因为便宜。
在电路中,该芯片引脚PROG的接地电阻阻值改变充电电流,该电阻阻值在原理图中默认3K(充电电流400mA),建议该电阻阻值不大于4K,您可根据电阻与充电电流关系表自行改变充电速度。
框内的LED为充电指示引脚,亮起代表充电中。
03.ADC获取锂电池电压
ESP8266 ADC 引脚具有10 位分辨率,可以获得值范围为 0 - 1023,因此要检测电压最大为4.2V的锂电池,需要建立ADC分压电路,原理图如下:
当锂电池电量不足,设备会在屏幕上显示电量不足,提醒使用者充电,另外当向服务器请求数据时会将电压作为参数上传。
目前,该电压取的近似值与实际电压相差约0.1v,上传至服务器的电压会作为返回值给到对应账号的Anroid端QuickChatApp,详情请结合代码。
04.锂电池选型
影响锂电池规格的主要有两个参数,一个是续航,一个是放置电池的空间,在空间允许的范围内续航越大越好!
本项目锂电池的规格为:高 <= 13mm 宽 <= 42mm。(803040-1000mAh)
高取决于四周螺丝孔柱的高,宽度取决于预留空间的宽度。
中景园1.3寸OLED显示屏。
06.微动按钮
07.主控芯片 ESP8266EX
我希望设备有这些功能:
设备能连接wifi
可以连接OLED显示屏
有足够的IO进行按键监测和LED状态显示
有ADC,可以检测电压
ESP8266满足这些要求,并且可以用Arduino快速开发。
其次,该芯片的市面价格最低可以到2.5元、算上外围电路也只有3.5-4元左右(大概),价格较友好。
3.固件烧录步骤
首先,我们需要了解一下ESP8266如何进行烧录:前提是GPIO0引脚在上电时为低电平(工作模式为高电平)。
另外,烧录孔不能让设备与电脑直接相连进行烧录工作,因此我们需要准备一个串口转TTL烧录器。
1.首先我们需要下载Arduino 1.X版本。
项目的硬件设备是用Arduino进行编写的,请注意不要下载最新版2.X的Arduino。
2.安装完成之后我们需要为Arduino安装ESP8266FS插件。设备的静态资源(例如html)通过该插件进行上传。
在Arduino2.0版本中我暂时没找到版本安装该插件,这是我建议安装旧版本的原因。
在项目的附件压缩包中找到ESP8266FS文件夹,将ESP8266FS文件夹整个移到你的Arduino安装目录的tools文件夹下:
3.打开Arduino,配置ESP8266开发环境。
4.添加依赖库,项目所用到的依赖库有两种:
一种是可以在arduino管理库中直接搜索并安装的
另一种是需要通过zip进行导入的
它们的入口都在左上角的项目->加载库中。
如何使用设备?
1.进入配置模式,若设备未进行初始化配置则自启动AP模式。
使用者访问192.168.4.1进行初始化配置,手动进入模式请在关机状态下按住中间按键并启动,演示:
2.连接设备热点并使用浏览器访问 http://192.168.4.1 进行初始化配置。
3.确认无误点击保存配置并重启,设备自动重启并搜寻初始化配置中的网络且自动连接,在连接成功后则可进行正常使用,如何使用请参考原文。
3.软件说明
软件程序作为客户端,还可以对设备的各项功能、参数进行修改保存,显示设备电量等等。
软件使用AndroidStudio+Kotlin进行开发,对安卓系统版本6以上的手机提供支持。
在写这个项目的时候,我构想的是服务器私有部署化,这样就更需要把设置服务器功能单独拿出来。
安装软件,打开软件之后是如下的界面,如果您自行部署了服务器,请点击右下角的“设置服务器”对服务器进行修改。
参考上面的Login to server界面,在邮箱一栏填写能够接收到验证码的邮箱。
点击获取验证码,若服务器地址正确很快验证码就会发送到你的邮箱,微信接受邮件效果:
输入验证码后,点击登录或注册并登录按钮,如果邮箱在这个服务器上没有注册过,服务器将自动注册,若存在该邮箱则正常登录。
成功后跳转至主界面 MainActivity ,登陆部分完毕。
注销账户是指删除在该服务器上的关于该账户的所有数据,包括但不限于用户表、作为发送者的所有聊天数据、从所有好友的好友列表中移除、清除DKey、UserKey等一切关于该账户的数据。
注销成功后跳转至登陆界面,该按钮在如下图所示右上角区域。
数据轮询就是定期向服务器申请最新数据并将其展示出来。
在MainActivity界面中,好友的申请信息、未读消息、设备状态、参数等需要不断刷新的数据,这些都需要数据轮询。
您可以自定义该轮询的间隔,默认为3秒,如果您服务器的交互速度快可以适当降低该值,若服务器速度慢且刷新间隔短,或导致软件闪退,一般情况3s就OK。
当收到好友消息时并不会通过系统弹窗进行提示,这个功能也是由于时间关系暂时简化了。
替代方案就是当好友向你发送消息时,服务器会通过邮箱向你的邮箱发信进行提醒,目前该提醒无间隔,意思就是好友发多少条消息就提醒多少次,后面我会增加提醒间隔,格式如下:
在我的使用情境中,可能出现以下几种情况:
设备对设备进行消息交互
设备对手机进行消息交互
手机对手机进行消息交互
这个项目主要针对上面的1、2种情况。第3种就不做讨论了,两个人都有手机了还用这个干什么……
下面我会对软件段进行设备参数修改进行说明。
首先要了解一个名词:DKey -> DeviceKey——设备的唯一密钥。
每个账户都拥有一个DKey,当对设备进行初始化时DKey是必填项,若设备无此参数,则无法访问服务器。
DKey是唯一的,请确保只有自己知晓DKey。
DKey可以被重置,当你重置DKey后旧的DKey会被删除,服务器会重新生成新的DKey并返回,而旧DKey的参数会被保留下来,如快捷回复列表、附加网络配置等。
快捷回复列表:上面说明过设备的结构,它只有三个按钮进行操控以完成上翻、下翻、确定等逻辑功能。
就目前而言,设备无法进行拼音输入等功能,即使实现也会变得很麻烦,所以我采用的是预填充内容方案——通过软件将想要回复的消息内容上传至服务器,设备再访问服务器同步该回复消息的数据列表以作为回复项。
硬限制:每条最多50字,最多200条。
附加网络配置:整个硬件设备的构建以来的就是它可以进行WIFI通信,这就会产生一个弊端,倘若我换了一个环境,由于设备性质又无法手动更换网络,那该怎么办?
解决这个问题的就是附加网络配置功能,通过软件将固定的地点的WIFI账号密码进行服务器上传,再让设备访问服务器进行保存,设备开机后会搜寻附近是否存在已保存的WIFI数据,若存在则自动连接。
我分三个状态进行说明。
A.发出好友申请,作为申请人可以使用添加好友功能,通过对方的邮箱向对方发出好友申请,此时处于等待对方同意或拒绝状态,申请人状态如下图所示,您可在此时取消该申请:
B.等待被申请人同意或拒绝该好友申请:作为被申请人接收到来自其他用户的申请,界面如下所示,在此时可以可以选择同意或拒绝该用户的好友申请,若同意则成为好友,显示在好友列表中,拒绝则显示如C所示:
C.作为申请者的好友申请被拒绝,则显示如下界面,此时可点击了解,则该Item被删除:
在与其他用户成为好友后,软件会将好友显示在消息列表中,如下图所示:
马赛克掉的是邮箱号,右侧的是在线状态,此时显示暂无消息,说明好友没有新的消息传来,对于好友的消息新旧的状态判断请自行查看代码。
点击View进入与该好友的消息界面,以app 1.0V 为例,界面组成如下:
4.搭建服务器端
建议您搭建自己的服务器。在这里我以华为云为例进行搭建,你可以参考下方教程:
1.下翻页面可以看到有不同规格的服务器,这里选择最低配的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可看到如下所示,则站点创建成功,若无法访问请检查端口是否放行,创建站点时参数是否填写错误:
点击网站右侧的配置修改配置文件,将下面的代码复制到指定位置并保存:
进入站点根目录,将根目录所有文件删除:
点击上传,将DJ_QuickChatServer.zip上传至根目录后右键进行解压,解压后如图所示:
进入如下图所示目录,找到settings.py,在约80行的位置修改参数为你的数据库参数:
邮箱管理者:我们接收的验证码和消息提醒都是通过这个邮箱管理者实现的,它负责服务器中所有邮件的收发,在搭建服务器后,您必须修改服务器中的EmailSender.py文件中的全局参数,如下所示:
可以看到其实质就是依托于第三方邮箱的smtp服务,因此你需要申请到一个邮箱并开启smtp,请参考https://blog.csdn.net/liuyuinsdu/article/details/113878840
等待很长时间后安装完成:
点击模块手动安装Django
安装完成后点击运行中停止项目,如上图绿色箭头所示。
点击配置适当增大进程线程
重新启动项目
到此服务器端的配置全部完成,请参考上方的软件说明,在软件端进行服务器配置后尝试登录,能够收到验证码证明服务器端正常运行。
更多详情及附件,可从原工程查看。
本文作者:立创开源硬件平台 OSHWHub 用户@zhbaa,禁止商用,未经许可禁止转载
MAX31865ATP+T/模数转换芯片ADC | 12.95 | |
LTM4644IY#PBF/电源模块 | 130.7 | |
ADUM1201BRZ-RL7/数字隔离器 | 4.69 | |
MAX31855KASA+T/ADC/DAC-专用型 | 8 | |
DS3231MZ+TRL/实时时钟(RTC) | 11.31 | |
AD7190BRUZ-REEL/模拟前端(AFE) | 37.95 | |
AD623ARZ-R7/仪表放大器 | 11.23 | |
MAX3232EEAE+T/RS232芯片 | 6.41 | |
ADUM3160BRWZ-RL/隔离式USB芯片 | 21.98 | |
AD620ARZ-REEL7/仪表放大器 | 20.91 |
50万+现货SKU
品类不断扩充中
科技智能大仓储
最快4小时发货
正品有保障
物料可追溯
明码标价节省时间
一站式采购元器件