arduino与树莓派cm4通过usb串口连接:
问题描述
前两天尝试了很久arduino和树莓派连接
终于找到了连接的方法!可恶
这是在简书找到的过程
主要是先在树莓派端导serial包
pip install serial
然后在两端发送和接收代码里设置相同波特率
arduino例程:
此处用dht11模块测试温度,
引脚插arduino端8号引脚
#include <DHT.h>
#define DHTPIN 8
#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...");
}
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
获得温湿度数据
树莓派端:
提示:这里填写该问题的具体解决方案:
先在终端里打ls /dev
找到Arduino的串口地址:/dev/ttyACM0
(也有可能是ttyUSB0)
安装pyserial,串口库
pip install serial
编写一个python程序,调用串口获取数据。
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()
将arduino通过usb连接树莓派
运行程序
得到结果