1、该项目由我业余时候开发,需要的小伙伴可以拿走,可应用在售货机、生鲜柜、快递柜、智能家居等领域
2、本系统的服务器端由PHP的workerman开发,采用的是tcp异步通信原理
3、硬件端stm32+sim800a由keil5开发
4、微信小程序
先上点效果图和代码图吧:
这里主要讲下workerman的后端代码:
<?php
use Workerman\Worker;
use \Workerman\Connection\AsyncTcpConnection;
require_once __DIR__ . '/Workerman/Autoloader.php';
$worker = new Worker('http://0.0.0.0:1996');
$worker->count = 4;
// 每个进程启动后在当前进程新增一个监听
$worker->onMessage = function($ws_connection, $message)
{
// 与远程task服务建立异步连接,ip为远程task服务的ip,如果是本机就是127.0.0.1,如果是集群就是lvs的ip
$task_connection = new AsyncTcpConnection('tcp://0.0.0.0:1997');
// 任务及参数数据
$task_data = array(
'function' => 'send_mail',
'args' => array('from'=>'xxx', 'to'=>'xxx', 'contents'=>'xxx'),
);
if($message == "aa"){
// 发送数据
$task_connection->send('aa');
}
if($message == "bb"){
// 发送数据
$task_connection->send('bb');
}
if($message == "cc"){
// 发送数据
$task_connection->send('cc');
}
if($message == "dd"){
// 发送数据
$task_connection->send('dd');
}
if($message == "ee"){
// 发送数据
$task_connection->send('ee');
}
if($message == "ff"){
// 发送数据
$task_connection->send('ff');
}
if($message == "jj"){
// 发送数据
$task_connection->send('jj');
}
// 异步获得结果
echo $message;
$task_connection->onMessage = function($task_connection, $task_result)use($ws_connection)
{
// 结果
var_dump($task_result);
// 获得结果后记得关闭异步连接
$task_connection->close();
// 通知对应的websocket客户端任务完成
$ws_connection->send('task complete');
};
// 执行异步连接
$task_connection->connect();
};
function on_message1($connection, $data)
{
sleep(3);
$connection->send('csled61');
}
function on_message2($connection, $data)
{
$connection->send("hello\n");
}
// 运行worker
Worker::runAll();
<?php
use Workerman\Worker;
use \Workerman\Connection\AsyncTcpConnection;
require_once __DIR__ . '/Workerman/Autoloader.php';
require_once __DIR__ . '/vendor/autoload.php';
// 创建一个Worker监听2347端口,不使用任何应用层协议
$worker = new Worker("tcp://0.0.0.0:1997");
// 启动4个进程对外提供服务
$worker->count = 1;
$worker->onWorkerStart = function($worker)
{
// 将db实例存储在全局变量中(也可以存储在某类的静态成员中)
global $db;
$db = new \Workerman\MySQL\Connection('localhost', '3306', 'root', '', 'shop');
};
// 当客户端发来数据时
$worker->onMessage = function($connection, $data)
{
// 向客户端发送hello $data
// string strDataLine = "csled01";
//Byte[] sendData = Encoding.UTF8.GetBytes(strDataLine);
// 通过全局变量获得db实例
global $db;
echo $data. "\n";
$data1 = strstr($data