学校通常会覆盖无线信号,但不让带手机,于是我希望能拥有一个设备,即使是没有网络的情况下,也能让校外的A同学联系到校内的我。

不让带手机?那就自己造一个“聊天设备”!

连不上“网”?那就自己创造“网”!

只要有wifi信号,我自制的聊天设备,就能用!!

本文会对本项目的:硬件设计软件设计服务器端搭建进行详细步骤教学。

项目

首先,我需要介绍这个硬件设备——QucikChatBox 。

它是一个客户端,没有网络和手机的情况下,可以接收手机发送的信息,可以给手机发送信息。

在对该设备进行初始化配置后,设备会自动连接网络并从服务器端拉取数据并进行处理。

我们怎么连接自己的网络 连不上网(1)

硬件设计原理与选型

1.指示灯

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

2.充电管理与修改充电电流

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

我们怎么连接自己的网络 连不上网(2)

用嘉立创EDA专业版设计的原理图

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

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

3.ADC获取锂电池电压

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

我们怎么连接自己的网络 连不上网(3)

用嘉立创EDA专业版设计的原理图

当锂电池电量不足,设备会在屏幕上显示电量不足,提醒使用者充电,另外当向服务器请求数据时会将电压作为参数上传

目前,该电压取的近似值与实际电压相差约0.1v,上传至服务器的电压会作为返回值给到对应账号的Anroid端QuickChatApp,详情请结合代码。

4.锂电池选型

影响锂电池规格的主要有两个参数,一个是续航,一个是放置电池的空间,在空间允许的范围内续航越大越好!

本项目锂电池的规格为:高 <= 13mm 宽 <= 42mm。(803040-1000mAh)

高取决于四周螺丝孔柱的高,宽度取决于预留空间的宽度。

5.OLED显示屏选型

中景园1.3寸OLED显示屏。

6.微动按钮

我们怎么连接自己的网络 连不上网(4)

7.主控芯片 ESP8266EX

我希望设备有这些功能:

  1. 设备能连接wifi
  2. 可以连接OLED显示屏
  3. 有足够的IO进行按键监测和LED状态显示
  4. 有ADC,可以检测电压

ESP8266满足这些要求,并且可以用arduino快速开发。

其次,该芯片的市面价格最低可以到2.5元、算上外围电路也只有3.5-4元左右(大概),价格较友好。

固件烧录步骤

首先,我们需要了解一下ESP8266如何进行烧录:前提是GPIO0引脚在上电时为低电平(工作模式为高电平)。

另外,烧录孔不能让设备与电脑直接相连进行烧录工作,因此我们需要准备一个串口转TTL烧录器。

1.首先我们需要下载Arduino 1.X版本。

项目的硬件设备是用Arduino进行编写的,请注意不要下载最新版2.X的Arduino。

我们怎么连接自己的网络 连不上网(5)

2.安装完成之后我们需要为Arduino安装ESP8266FS插件。设备的静态资源(例如html)通过该插件进行上传。

在Arduino2.0版本中我暂时没找到版本安装该插件,这是我建议安装旧版本的原因。

在项目的附件压缩包中找到ESP8266FS文件夹,将ESP8266FS文件夹整个移到你的Arduino安装目录的tools文件夹下:

我们怎么连接自己的网络 连不上网(6)

我们怎么连接自己的网络 连不上网(7)

3.打开Arduino,配置ESP8266开发环境。

4.添加依赖库,项目所用到的依赖库有两种:

它们的入口都在左上角的项目->加载库中。

如何使用设备?

1.进入配置模式,若设备未进行初始化配置则自启动AP模式。

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

我们怎么连接自己的网络 连不上网(8)

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

3.确认无误点击保存配置并重启,设备自动重启并搜寻初始化配置中的网络且自动连接,在连接成功后则可进行正常使用,如何使用请参考原文。

软件说明

软件程序作为客户端,还可以对设备的各项功能、参数进行修改保存,显示设备电量等等。

软件使用AndroidStudio Kotlin进行开发,对安卓系统版本6以上的手机提供支持。

1.设置服务器

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

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

我们怎么连接自己的网络 连不上网(9)

2.登录或注册账户

参考上面的Login to server界面,在邮箱一栏填写能够接收到验证码的邮箱。

点击获取验证码,若服务器地址正确很快验证码就会发送到你的邮箱,微信接受邮件效果:

我们怎么连接自己的网络 连不上网(10)

输入验证码后,点击登录或注册并登录按钮,如果邮箱在这个服务器上没有注册过,服务器将自动注册,若存在该邮箱则正常登录。

成功后跳转至主界面 MainActivity ,登陆部分完毕。

3.注销账户

注销账户是指删除在该服务器上的关于该账户的所有数据,包括但不限于用户表、作为发送者的所有聊天数据、从所有好友的好友列表中移除、清除DKey、UserKey等一切关于该账户的数据。

注销成功后跳转至登陆界面,该按钮在如下图所示右上角区域。

我们怎么连接自己的网络 连不上网(11)

4.数据轮询间隔

数据轮询就是定期向服务器申请最新数据并将其展示出来

在MainActivity界面中,好友的申请信息、未读消息、设备状态、参数等需要不断刷新的数据,这些都需要数据轮询。

您可以自定义该轮询的间隔,默认为3秒,如果您服务器的交互速度快可以适当降低该值,若服务器速度慢且刷新间隔短,或导致软件闪退,一般情况3s就OK。

我们怎么连接自己的网络 连不上网(12)

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

当收到好友消息时并不会通过系统弹窗进行提示,这个功能也是由于时间关系暂时简化了。

替代方案就是当好友向你发送消息时,服务器会通过邮箱向你的邮箱发信进行提醒,目前该提醒无间隔,意思就是好友发多少条消息就提醒多少次,后面我会增加提醒间隔,格式如下:

我们怎么连接自己的网络 连不上网(13)

6.修改硬件设备参数

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

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

这个项目主要针对上面的1、2种情况。第3种就不做讨论了,两个人都有手机了还用这个干什么……

下面我会对软件段进行设备参数修改进行说明。

首先要了解一个名词:DKey -> DeviceKey——设备的唯一密钥。

每个账户都拥有一个DKey,当对设备进行初始化时DKey是必填项,若设备无此参数,则无法访问服务器。

快捷回复列表:上面说明过设备的结构,它只有三个按钮进行操控以完成上翻、下翻、确定等逻辑功能。

就目前而言,设备无法进行拼音输入等功能,即使实现也会变得很麻烦,所以我采用的是预填充内容方案——通过软件将想要回复的消息内容上传至服务器,设备再访问服务器同步该回复消息的数据列表以作为回复项。

硬限制:每条最多50字,最多200条。

附加网络配置:整个硬件设备的构建以来的就是它可以进行WIFI通信,这就会产生一个弊端,倘若我换了一个环境,由于设备性质又无法手动更换网络,那该怎么办?

解决这个问题的就是附加网络配置功能,通过软件将固定的地点的WIFI账号密码进行服务器上传,再让设备访问服务器进行保存,设备开机后会搜寻附近是否存在已保存的WIFI数据,若存在则自动连接。

我们怎么连接自己的网络 连不上网(14)

7.好友管理

我分三个状态进行说明。

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

我们怎么连接自己的网络 连不上网(15)

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

我们怎么连接自己的网络 连不上网(16)

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

我们怎么连接自己的网络 连不上网(17)

8.与好友的信息交互

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

我们怎么连接自己的网络 连不上网(18)

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

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

我们怎么连接自己的网络 连不上网(19)

我们怎么连接自己的网络 连不上网(20)

搭建服务器端

建议您搭建自己的服务器。在这里我以华为云为例进行搭建,你可以参考下方教程:

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

我们怎么连接自己的网络 连不上网(21)

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

其他配置项默认即可。

我们怎么连接自己的网络 连不上网(22)

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

我们怎么连接自己的网络 连不上网(23)

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

我们怎么连接自己的网络 连不上网(24)

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

我们怎么连接自己的网络 连不上网(25)

我们怎么连接自己的网络 连不上网(26)

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

我们怎么连接自己的网络 连不上网(27)

我们怎么连接自己的网络 连不上网(28)

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

我们怎么连接自己的网络 连不上网(29)

7.安装宝塔面板,点击蓝字跳转至宝塔官网,找到下图中界面并点击右侧复制:

我们怎么连接自己的网络 连不上网(30)

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

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

我们怎么连接自己的网络 连不上网(31)

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

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

我们怎么连接自己的网络 连不上网(32)

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

我们需要在安全组中开放该端口,操作如下:

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

我们怎么连接自己的网络 连不上网(33)

我们怎么连接自己的网络 连不上网(34)

我们怎么连接自己的网络 连不上网(35)

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

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

我们怎么连接自己的网络 连不上网(36)

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

我们怎么连接自己的网络 连不上网(37)

所有软件均选择极速安装

我们怎么连接自己的网络 连不上网(38)

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

我们怎么连接自己的网络 连不上网(39)

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

我们怎么连接自己的网络 连不上网(40)

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

我们怎么连接自己的网络 连不上网(41)

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

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

我们怎么连接自己的网络 连不上网(42)

我们怎么连接自己的网络 连不上网(43)

我们怎么连接自己的网络 连不上网(44)

我们怎么连接自己的网络 连不上网(45)

我们怎么连接自己的网络 连不上网(46)

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

我们怎么连接自己的网络 连不上网(47)

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

我们怎么连接自己的网络 连不上网(48)

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

我们怎么连接自己的网络 连不上网(49)

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

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行的位置修改参数为你的数据库参数:

我们怎么连接自己的网络 连不上网(50)

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

我们怎么连接自己的网络 连不上网(51)

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

我们怎么连接自己的网络 连不上网(52)

我们怎么连接自己的网络 连不上网(53)

我们怎么连接自己的网络 连不上网(54)

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

  1. 点击模块手动安装Django
  2. 安装完成后点击运行中停止项目,如上图绿色箭头所示。
  3. 点击配置适当增大进程线程
  4. 重新启动项目

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

附件下载

什么?你竟然看到了这里!而不是收藏吃灰?给你点个大大的赞!

如果你需要本项目的电路,代码源文件,请自取,无偿分享的:https://oshwhub.com/zhbaa/esp_8266ex_-kuai-jie-hui-fu-qi#P6

我们怎么连接自己的网络 连不上网(55)

本文参考资料:立创开源硬件平台《ESP8266EX_QuickChatBox》作者:zhbaa

https://oshwhub.com/zhbaa/esp_8266ex_-kuai-jie-hui-fu-qi#P6

如果你觉得这篇文章不错!欢迎点赞、关注、转发、收藏~

我会持续更新优质开源项目!

,