毕设二:老年人摔倒检测及报警装置
在上一篇文章中说了大致的思路,在这里补充一些在调试过程中遇到的问题,由于当时水平有限,对于STM32理解的还不是很透彻,代码都是东拼西凑的移植,规范性不是很好,后面会分享出各个模块的代码,以及App的代码,还有服务器这么搭建的过程。
1. 倾斜角加速度传感器模块
倾斜角加速度传感器采集人体运动时的加速度以及倾斜角,用来作为跌倒的判断依据。我在这里采用的是 ADXL345,该芯片能测量静态重力加速度、测量剧烈运动的动态加速和微小的倾斜角度变化。当时自己的检测准确率一般般 加速度运用的不是很好,只运用了倾斜角度。本来还想着加一个足底压力传感器的,后面由于时间紧迫没有加。这里给出ADXL345模块的资料以及能在STM32F1下运行显示出倾斜角度以及加速度的代码。
ADXL345在STM32F1下运行显示出倾斜角度以及加速度的代码地址
2.定位导航模块
本课题使用了 ATGM336H-5N BDS/GNSS 全星座定位导航模块通过串口与单片机进行通信,该模块能接收到 6 个卫星 型号,并结合这 6 个信号进行联合定位。某宝上有,还挺贵的30多吧,它上面有一个小电池,当时不知道为什么突然就用不了了,我怀疑是这个小电池有问题,主要是这个小电磁是焊上去的不能换,吐了…,于是又买了一个。 这个定位导航模块还行,主要是进了房子里就定位不到了,不像手机里的GPS,各种算法各种基站定位啥的,这个模块进房子里就不管用了,在窗口旁边还能定位到一些。这也是个坑。
GPRS 模块
该模块可以实时发送数据到云服务器,定位老年人跌倒的地方。我使用的是GA6-B mini GPRS/GSM 模块。我用这个模块与腾讯云服务器进行通信,将定位导航模块定位得到的经纬度传到服务器,服务器再转发出去给App。
服务器
服务器我买的是腾讯云的,因为学长的推荐,腾讯云服务器有学生验证,一个月才10块钱,很便宜。腾讯云服务器端采用Ubuntu 操作系统,CPU 为1 核,内存为 2GB,公网带宽为 1Mbps。接下来就是服务器下面运行基于 Workman 的 Worker 应用进程。主要目的是监听端口,将GPRS 模块上传上来的数据转发给APP。
Workerman
Workerman是一款开源高性能异步PHP socket框架。支持高并发,超高稳定性,被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。 支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。拥有异步Mysql、异步Redis、异步Http、MQTT物联网客户端、异步消息队列等众多高性能组件。
我当时也不知道这是啥,问了学长学长给了我一个文件,应该是要实现的话就是基于这个文件,学长说你去看看php语言,实现服务器转发数据只需要几十行代码就行,能看懂就行。
<?php
use Workerman\Worker;
require_once __DIR__ . '/Autoloader.php';
$global_uid = 0;
// 当客户端连上来时分配uid,并保存连接,并通知所有客户端
function handle_connection($connection)
{
global $text_worker, $global_uid;
// 为这个连接分配一个uid
$connection->uid = ++$global_uid;
}
// 当客户端发送消息过来时,转发给所有人
function handle_message($connection, $data)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
if($conn->uid==$connection->uid){
}else{
$conn->send("$data");
}
}
}
// 当客户端断开时,广播给所有客户端
function handle_close($connection)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
// $conn->send("user[{$connection->uid}] logout");
}
}
// 创建一个文本协议的Worker监听2347接口
$text_worker = new Worker("tcp://0.0.0.0:6610");
// 只启动1个进程,这样方便客户端之间传输数据
$text_worker->count = 1;
$text_worker->onConnect = 'handle_connection';
while($i<=5)
{
$text_worker->onMessage = 'handle_message';
$i++;
}
$text_worker->onClose = 'handle_close';
Worker::runAll();
我就去看了看PHP语言,大致理解了这个代码。
按照学长说的步骤,将这个代码文件port-6610.php放入Workerman-master这个文件夹里面
然后将Workerman-master放到买好的虚拟服务器上,这里我是通过Bitvise SSH Client这个软件将本地文件放到服务器上的。
或者也可以通过后台端上传上去,具体操作我有些记不清了。
然后就在服务器下运行 port-6610.php文件。
首先找到文件夹,通过cd 等操作,如上图,然后通过 php port-6610.php start -d 这一句运行, -d表示在后台运行,你退出服务器后也能运行。
今天先说到这,有哪里不对的地方请大家指出,谢谢啦~~~