2016-06-28 63 views
3

我具有附接到其又連接到我樹莓裨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(","); 

} 
+0

爲什麼你使用''在python腳本STR(Battout)? – dubafek

回答

2

一些觀察到您的實現。

  1. 爲什麼在python腳本中使用Battout

  2. 在你期望的線的Python腳本(這意味着在「\ n」結尾的字符串),但在Arduino的C++代碼使用print代替println或添加一行飼料。

  3. 顯然你期待在python腳本中收到類似「12,32,15」的東西,但是如果你只發送一個字符到Arduino,它將只會產生主循環的1次迭代。

+0

謝謝,只是不添加在Arduino的新行一個簡單的錯誤有固定的一切。 – Bibsta

0

沒有與樹莓裨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)

相關問題