树莓派查询串口python
ls /dev/tty*
经过 拔插发现多了一个缓存
就是他了。oop
arudnio代码测试
void setup() { Serial.begin(9600); //打开串口 } void loop() { Serial.println("Hello Raspberry,I am Arduino."); delay(1000); if ( Serial.available()) { if('s' == Serial.read()) Serial.println("Hello Raspberry,I am Arduino."); } }
# -*- coding: utf-8 -* import serial import time ser = serial.Serial('/dev/ttyUSB0', 9600) if ser.isOpen == False: ser.open() # 打开串口 ser.write(b"Raspberry pi is ready") try: while True: size = ser.inWaiting() # 得到缓冲区字符 if size != 0: response = ser.read(size) # 读取内容并显示 print(response) ser.flushInput() # 清空接收缓存区 time.sleep(0.1) # 软件延时 except KeyboardInterrupt: ser.close()
#include <DHT.h> #define DHTPIN 3 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { // put your setup code here, to run once: Serial.begin(9600); dht.begin(); Serial.println("Hi Vcancy. Arduino is running..."); } /** Arduino loop @param none @return none */ char target[] = "GET TH"; void loop() { // 每次等待2秒后再输出(这里必须等大于1秒,否则不许确) delay(2000); // 从串口读数据并判断 if (Serial.available() > 0) { if ( Serial.find(target)) { // 获取温度或者湿度须要250毫秒! // 传感器获取到的温度和湿度多是2秒内的 float h = dht.readHumidity();// 读取当前的湿度 float t = dht.readTemperature(); // 读取当前的温度,单位C float f = dht.readTemperature(true);//读取当前的温度,单位F // 若是读取失败则退出,再读取一次 if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); return; } // 读取体感温度,单位F float hif = dht.computeHeatIndex(f, h); // 读取体感温度,单位C float hic = dht.computeHeatIndex(t, h, false); Serial.print("湿度: "); Serial.print(h); Serial.print(" %\t"); Serial.print("温度: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t"); Serial.print("体感温度: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.println(" *F"); } } }
而后能够在串口助手中进行测试,我这里由于项目须要,将GET TH 改成了数字8,而且修改了一下输出,下面大家能够看到我作的更改,应该更符合同窗们对数据处理的要求,这里大家在测试时仍然能够输入GET TH进行测试:ui
须要先安装python串口读取的库文件:pip install pyserial
(若是已经安装过了则忽略)
找到Arduino的串口地址:/dev/ttyACM0
code
import serial ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1) try: while 1: ser.write(b"GET TH") response = str(ser.readline().decode()) if response.startswith('湿度:'): print(response.strip('\n')) except KeyboardInterrupt: ser.close()
若是要单截取采集到的温湿度,对数据进行处理,而不须要打印全部信息,咱们能够在python和Arduino作以下更改:blog
首先在Arduino中,咱们不须要像串口打印那么多数据,只取咱们须要的温湿度,像这样(效果同上面的GIF):ip
Serial.print("hum: "); Serial.print(h); Serial.print("tem: "); Serial.println(t); // 打印出效果以下:hum: 33.0tem: 25.00
而后在python中,咱们经过字符串截取,取到咱们的温湿度,这里咱们截取两位整数utf-8
response = str(single.readline().decode()) if response.startswith('hum:'): #截取整数部分 hum = response[5:7] #33 tem = response[-6:-3] # 25 # 将处理后的数据放在templateData 中 templateData = { 'tem': tem, 'hum': hum } print(response.strip('\n'))