首页 > 应用与分享 > 连不上“网”?那就自己创造“网”!
  • 连不上“网”?那就自己创造“网”!

  • 2023-03-21 11:09:30 阅读量:3778

本文作者:立创开源硬件平台 OSHWHub @zhbaa禁止商用,未经许可禁止转载点击看原文章



1.工程描述


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

本文会对:硬件设计、软件设计、服务器端搭建进行详细教学。



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)

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


05. OLED显示屏选型

中景园1.3寸OLED显示屏。


06.微动按钮


  


07.主控芯片 ESP8266EX


我希望设备有这些功能:

  1. 设备能连接wifi 

  2. 可以连接OLED显示屏

  3. 有足够的IO进行按键监测和LED状态显示

  4. 有ADC,可以检测电压

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

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


3.固件烧录步骤


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

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


01. 详细步骤教程

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.软件说明


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


Android端软件程序

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


01. 设置服务器

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

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


  


02. 登录或注册账户

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

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


  


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

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


03 注销账户

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

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


  


04. 数据轮询间隔

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

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

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


  


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

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

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


  



06. 修改硬件设备参数

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

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

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

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

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

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

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

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

  • DKey是唯一的,请确保只有自己知晓DKey。

  • DKey可以被重置,当你重置DKey后旧的DKey会被删除,服务器会重新生成新的DKey并返回,而旧DKey的参数会被保留下来,如快捷回复列表、附加网络配置等。


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

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

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

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


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


  


07. 好友管理

我分三个状态进行说明。

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


  


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


  


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


  


08. 与好友的信息交互

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


  


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

点击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


  

  

  

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

  1. 点击模块手动安装Django

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

  3. 点击配置适当增大进程线程

  4. 重新启动项目

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


更多详情及附件,可从原工程查看。

本文作者:立创开源硬件平台 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
您的浏览器版本过低(IE8及IE8以下的浏览器或者其他浏览器的兼容模式),存在严重安全漏洞,请切换浏览器为极速模式或者将IE浏览器升级到更高版本。 【查看详情】
推荐您下载并使用 立创商城APP 或者最新版 谷歌浏览器火狐浏览器360浏览器搜狗浏览器QQ浏览器 的极(高)速模式进行访问。
© 2022 深圳市立创电子商务有限公司 版权所有

提示

您确定删除此收货地址吗?

提示

您确定删除此收货地址吗?

成功提示

content

失败提示

content

微信咨询

关注公众号咨询客服

咨询客服
  • 在线客服热线

    0755-83865666

  • 服务时间

    工作日  8:30~20:30

    节假日  8:30~18:00

  • 服务投诉

QQ咨询
优惠券
芯媒体

立创商城旗下芯媒体

微信号:icsight

建议反馈
填问卷 立创用户体验问卷调查 立即参与
活动规则
活动规则
展开客服