您的位置:首页 > 数据库 > SQL

wr703n刷openwrt智能控制--控制mysql、串口通信等

2016-09-06 20:43 288 查看
我们已经成功在openwrt建立一个php+mysql服务器(等同于现在的云端:不过也是个php+mysql)。

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

第一部分:创建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等无线模块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: