06
2019
05

WIFI作品DIY教程06-《openwrt后台程序》控制mysql、串口通信等

续上篇教程WIFI作品DIY教程05-《家居服务器》web server(php+mysql+uhttpd)
我们已经成功在openwrt建立一个php+mysql服务器(等同于现在的云端:不过也是个php+mysql)。

那么有了web服务器还是不够的,我们需要写一个后台程序,不断将传感器或控制器的数据进行添加、更新、获取、删除等。
这样我们才能通过php连接mysql数据库显示各种数据出来,然后编写APP或网页或IOS客户端。然后就可以手机远程控制了哦!


我们需要的配件:Z WIFI核心板USB扩展板SD卡arduino扩展板

第一部分:创建MYSQL数据库表(存储各种数据和命令)
一、下载navicat for mysql软件
下载地址:
http://pan.baidu.com/s/1eQgUZM6(里面有破解key)
运行navicat.exe,输入注册码就可以登陆了!

输入图上信息确定,密码是:znck007(之前安装mysql设置的)






新建一个数据库。


数据库名称,编码,确定就新建了znckapi数据库。



然后我们再建表来存储数据,点击“新建查询”是来执行sql语句。



直接复制下面的代码,然后执行。

CREATE TABLE IF NOT EXISTS `api_worklist` (
  `id` int(16) unsigned NOT NULL AUTO_INCREMENT,
  `type` int(2) NOT NULL COMMENT '1网设2上传3定时',
  `uid` int(8) NOT NULL,
  `sid` varchar(3) NOT NULL,
  `nid` varchar(3) NOT NULL,
  `data` varchar(32) NOT NULL,
  `note` varchar(64) NOT NULL,
  `status` int(2) NOT NULL COMMENT '1成功2失败3超次数4超15分',
  `time` datetime NOT NULL,
  `ip` varchar(16) NOT NULL,
  `num` int(2) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `uid` (`uid`),
  KEY `time` (`time`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;



刷新一下,表就出现了,双击可以查看表数据了哦!


第二部分:上传web网站文件(完全开源哦)
winscp文件上传软件
http://pan.baidu.com/s/1qW0nhNI


网站文件和后台程序http://pan.baidu.com/s/1i3pGVcD
下载运行winscp,然后解压www里的文件上传到openwrt



选择root,然后双击mnt/sda1/www目前进入SD卡的www目录,没有则右击新建www。


上传到openwrt





第三部分:编写PHP网页(网页操作MYSQL数据库,并显示出来)


我们先看一下编写PHP的界面,用来测试MYSQL的读取、写入、更新、删除等操作。
PHP又是一门语言哦,不会照我们写的学习就好!




在winscp里打开/mnt/sda1/www/znck007的mysqltest.php文件。




先选择编码utf-8,则否会乱码。
我们会看到:
if( $_GET['mode']=="select")//获取数据库记录

if( $_GET['mode']=="insert") //插入数据

if( $_GET['mode']=="update") //更新数据

if( $_GET['mode']=="delete") //删除数据

点击网页的按钮,就是在执行这些代码哦!




填写操作数据、说明、当前状态,添加后就可以在MYSQL数据库里保存了。
数据库一般保存:
模块类型(如001代表网关、2代表温度等类型,由你自己定义代表什么)
模块编号(如002代表同类型的第二个模块等,也由你自己定义)
操作数据(一般0代码关闭,1代表开灯,1-255代表从1升到255等,也由你定义)
当前状态:(如我们定义:0未处理 1成功 2失败 3超过失败几次等)

这些字段数据对应我们无线传输的{ck00x00x000000}等,是一样的道理。
{ck}是代表我们的标示,00x是模块类型,00x是模块编号,后面就是操作数据咯。





在/mnt/sda1/www/znck007还有个重要的文件就是:conn.php
它是连接MYSQL的,需要设置主机、用户名、密码、数据库名,mysqltest.php引用它才连接到数据库!



第四部分:Python安装(强大的脚本,集成很多类库操作非常简单)
将python安装到sd卡。


mkdir -p /mnt/sda1/python/ (新建软件包目录)
echo dest pythondisk /mnt/sda1/python/ >> /etc/opkg.conf (修改opgk配置文件)
opkg --dest pythondisk install python (将python安装到U盘)
ln -s /mnt/sda1/python/usr/bin/python /usr/bin/python (为python创建快捷方式,如省略此步,需键入 /mnt/sda1/python/usr/bin/python 才能启动python)

opkg --dest pythondisk install pyserial  (安装串口通信类)
opkg --dest pythondisk install python-mysql(安装mysql操作类)


第五部分:编写Python程序(串口通信、读写更删MYSQL数据库,让所有数据互动起来)

在/mnt/sda1/www/cgi-bin里的znckgbrun就是python脚本,记得给他设置权限:属性-》都打勾。



脚本的原理:
1、连接arduino串口,并时时获取数据。
2、当发现有数据则写入mysql(一般用来保存传感器数据)。
3、每一秒获取mysql未处理的数据(一般为网页/app等插入的命令数据)
4、如果有未处理数据,则串口发送到Arduino。
之后我们在家居网关,就可以在Arduino上处理命令然后通过zigbee、nrf24l01、315等无线控制整个家里了。



输入测试脚本是否运行成功
python /mnt/sda1/www/cgi-bin/znckbgrun



如果有相同信息输出,没有提示错误退出,那么说明脚本正常运行了!
关闭请先按Ctrl+Z,然后输入
killall -9 python
killall -9 python

输入二次回车确保完全关闭python


第六部分:编写Arduino扩展板程序和Python串口通信(利用arduino编译生成hex,再刷写到Z WIFI的arduino扩展板)
一、编译hex文件
下载serialtest源代码
http://pan.baidu.com/s/1kT855PH


解压文件后,运行arduino,如上图。


选择file->examples->znck007->zwifi_serialtest



再选择我们的板znck007 arduino Core+ (Atmega644PA@16M,5V)



选择Com口(单独使用usb连接电脑编译时需要选择,否则可以不选)。






点击编译,等待完成编译。

在build的文件夹下找到zwifi_serialtest.cpp.hex文件,再用Winscp上传到openwrt的www目录里。


二、安装arduino刷写软件(可以在openwrt刷写arduino代码)

opkg update

opkg install avrdude

avrdude -p m644p -c arduino -b 115200 -P /dev/ttyUSB0 -C /etc/avrdude.conf -U flash:w:/www/zwifi_mq_2.cpp.hex
然后实行这个命令就可以刷写Arduino代码了。其中/www/zwifi_mq_2.cpp.hex可以改成你的hex文件路径!

killall -9 python
killall -9 python

先关闭之前的python(防止多次同时运行),
再次运行python /mnt/sda1/www/cgi-bin/znckbgrun,在界面上是没有任何输出是正常的。它会获取到arduino发来的串口数据并保存到数据库了。


第七部分:实现自动启动脚本(重启就会自动启动,无必人为的全自动后台运行)

使用winscp上传znckserver文件到/etc/init.d
这个文件的脚本是(实现在开机启动和停止的代码):
#!/bin/sh /etc/rc.common
# Copyright (C) 2013 OpenWrt.org


START=99
start() {
python /mnt/sda1/www/cgi-bin/znckbgrun &
}
stop() {
killall -9 python
}


上传后,必须给文件权限,一般我们全打上勾。



输入以下命令开机启动,和马上运行吧!
/etc/init.d/znckserver enable
/etc/init.d/znckserver start


如果要停止,请参考以下代码
/etc/init.d/znckserver disable 禁止启动时自动运行

/etc/init.d/znckserver stop 停止znckserver:


完成了这一步,那么家居网关的概念就出来了,我们再ZIGBEE、Nrf24l01、挂蓝牙、315等无线模块。
然后就可以低成本的完成:入室防盗、手机开门、窗帘开窗、电灯开关、无线插座、红外摇控、空气检测、温度调控等功能咯。

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。