树莓裨&Arduino的串行读传感器数据
我具有附接到其又连接到我树莓裨3.我的Arduino UNO电压传感器我想抢夺从Arduino的乒乓型的方式将传感器信息到树莓派。我会通过Python脚本上一个cronjob和传感器值抓起并放到一个MySQL数据库发送的字符将其唤醒。树莓裨&Arduino的串行读传感器数据
在未来,我想更多的传感器添加到Arduino
我遇到的问题是Python的一面,当我运行Python代码我只是得到了一个空白的黑线。
树莓派3 Python代码:
#!/usr/bin/python
import serial
import MySQLdb
import time
db = MySQLdb.connect(host="localhost",
user="user",
passwd="password",
db="database")
cur = db.cursor()
port = serial.Serial("/dev/ttyACM0", baudrate = 9600, timeout=None)
port.flushInput()
sensor1 = 0;
sensor2 = 0;
sensor3 = 0;
vals = []
while (port.inWaiting()==0):
port.write("*")
time.sleep(1)
vals = (port.readline()).split(',')
print vals
sensor1 = int(vals[0])
sensor2 = int(vals[1])
sensor3 = int(vals[2])
cur.execute("insert into voltage(volts) values(" + str(Battout) + ")")
cur.execute("SELECT * from voltage")
db.close()
的Arduino代码:
const int BattVolt = A0;
int BattVal = 0;
float Battout;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.flush();
while(!Serial.available()); //wait for character from raspi
delay(1000);
float Voltage;
BattVal = analogRead(BattVolt); //read analog pins
Voltage=BattVal/4.09;
Battout=(Voltage/10);
Serial.print(Battout);
Serial.print(",");
}
一些观察到您的实现。
为什么在python脚本中使用
Battout
?在你期望的线的Python脚本(这意味着在“\ n”结尾的字符串),但在Arduino的C++代码使用
print
代替println
或添加一行饲料。显然你期待在python脚本中收到类似“12,32,15”的东西,但是如果你只发送一个字符到Arduino,它将只会产生主循环的1次迭代。
谢谢,只是不添加在Arduino的新行一个简单的错误有固定的一切。 – Bibsta
没有与树莓裨3和uart0
(蓝牙),uart1
(串行)的问题。
对于Pi 3 uart1
通常在/dev/ttyS0
和TX-GPIO 14,RX-GPIO 15上可用。uart1
的波特率取决于核心时钟。所以如果核心时钟改变,波特率将改变!
解决方法1:在/boot/config.txt
,添加行core_freq=250
。保存并重新启动!现在你的Pi有一个恒定的核心频率。 Raspberry Pi 3 UART baud rate workaround
解决方法2:更改设备树,使用uart0
进行串行通信,使用uart1
进行蓝牙(现在蓝牙也是同样的问题)。 Raspberry Pi 3 compatibility (BT disable & serial port remap fix)
为什么你使用''在python脚本STR(Battout)? – dubafek