树莓派串口通信python函数_(12)树莓派串口通信

本文介绍了一个基于Arduino和树莓派的串口通信实例。Arduino负责收集温湿度数据,并通过串口发送给树莓派,树莓派使用Python接收并打印这些数据。Arduino采用DHT11传感器进行测量。

1串口

树莓派代码(python):

需要先安装python串口读取的库文件:pip install pyserial

(如果已经安装过了则忽略)

找到Arduino的串口地址:/dev/ttyACM0

Arduino代码:

运行时如果报/x86或者ASCII码无法解析错误。可以将代码中的中文全部换成英文,就不会错了,可能是因为无法识别中文

#include

#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");

}

}

}

2 树莓派接受

# -*- coding: utf-8 -*

import serial

import time

ser = serial.Serial('/dev/ttyUSB0', 115200)

if ser.isOpen == False:

ser.open() # 打开串口

ser.write(b"Raspberry pi is ready")

try:

while True:

response = ser.readline()

print(response)

time.sleep(0.1) # 软件延时

except KeyboardInterrupt:

ser.close()

### 示例代码 在树莓派上使用Python进行串口通信时,可以通过`pyserial`库实现。以下是一个简单的示例代码,展示了如何初始化串口、发送和接收数据。 ```python import serial import time # 初始化串口 ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1) # 根据实际情况修改串口号和波特率 def send_data(data): """ 发送数据到串口 :param data: 要发送的数据 """ ser.write(data.encode()) # 将字符串编码为字节并发送 def receive_data(): """ 从串口接收数据 :return: 接收到的数据 """ if ser.in_waiting > 0: data = ser.read(ser.in_waiting).decode('utf-8') # 读取数据并解码为字符串 return data return '' try: while True: # 发送数据 send_data("Hello, Serial Port!\n") # 接收数据 received = receive_data() if received: print("Received:", received) # 延时一段时间 time.sleep(1) except KeyboardInterrupt: # 关闭串口 ser.close() ``` ### 代码说明 - **初始化串口**:使用`serial.Serial`函数初始化串口设备,指定串口号(如`/dev/ttyUSB0`)、波特率(如`9600`)和超时时间(如`timeout=1`)。 - **发送数据**:通过`ser.write()`函数发送数据,数据需要先编码为字节。 - **接收数据**:通过`ser.in_waiting`检查是否有数据可读,然后使用`ser.read()`读取数据,并解码为字符串。 - **异常处理**:在程序结束时关闭串口,避免资源泄漏。 ### 注意事项 - **串口号**:根据实际连接的设备,串口号可能会不同。例如,如果是通过USB转串口模块连接,通常使用`/dev/ttyUSB0`;如果是通过树莓派的GPIO引脚连接,通常使用`/dev/ttyAMA0`或`/dev/serial0`。 - **波特率**:确保波特率与目标设备一致,否则无法正确通信。 - **权限问题**:在某些情况下,可能需要使用`sudo`运行脚本,以确保有权限访问串口设备。 ### 调试工具 - **Minicom**:一个常用的串口调试工具,可以在Linux系统中安装和使用,类似于Windows上的串口调试助手[^4]。 ### 相关问题 1. 如何在树莓派上安装和配置Minicom? 2. 树莓派如何通过GPIO引脚进行串口通信? 3. 如何解决树莓派串口通信中的常见问题,如权限错误或设备未找到? 4. 有哪些其他Python库可以用于树莓派串口通信? 5. 如何在树莓派上实现多线程的串口通信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值