在使用openwrt读取arduino数据的过程中,遇到了每次读取都会使arduino的板子重新打开串口,打开串口后就会重新进行重置,这个时候无法读取正确的传感器的数据。

代码如下:

<span style="font-size:18px;">#!/usr/bin/python
# -*- coding: utf-8 -*-

import cgi, os
import commands
import serial


#设置返回类型和编码
print """\
Content-Type: text/html;charset=utf-8\n
"""


mode = "";
form = cgi.FieldStorage() #获取POST数据
if form.has_key("mode"): #是否存在传送值
	mode = form['mode'].value #获取该值
	#print mode #打印显示
	#print "<br>" #换行


#如果是发送数据
if (mode == "alarmdata"):
	ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=1) #读取ttyUSB0串口
	#ser.write("lABC")	#写入ttyUSB0串口

	sendcount=0
	while True:
		data=ser.readline() #读取一行 读取1个字符read(1)		
		print (data) #repr 打印出数据
		break #退出串口读取

	ser.close()</span>
如果用网页实时读取,就会发现数值并不是真实数值。

通过实验,我发现若是只打开一次串口,再进行读取就没有这个问题,所以我使用python一次打开串口,循环读取串口数据并写入txt文档中,然后使用js实时读取txt中的数值,只有这样才能正确读取arduino传回来的数值。


而使用openwrt写入arduino也有这个问题,主要问题还是串口打开的问题,需要一次打开串口后,循环写入才能写入正常数据。处理方法和上面一样,也是利用txt。


还有一个办法就是将这些个数据写入mysql数据库,再进行读写。不知道还有人遇到这个问题吗,您是怎么解决的,希望有更好的办法~~~



Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐