这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【树莓派Zero2W】——I2C、串口、SPI总线测试

共1条 1/1 1 跳转至

【树莓派Zero2W】——I2C、串口、SPI总线测试

助工
2025-12-26 09:27:04     打赏


树莓派Zero 2 W也拥有着40针的引脚,支持着I2C、SPI、串口等总线功能。这里使用外设对这些总线进行测试。


I2C使用。I2C,Inter-Integrated Circuit。它是一种同步、串行、半双工的通信总线。同步,即发送端和接收端要求严格同步,通信双方使用的是同一个时钟源。串行,即使用一根数据线传输,数据一位一位地传输。而半双工,指的是接收数据和发送数据不可同时进行。这里我使用一个Unit ENV-III 环境传感器来测试I2C总线。这款传感器内部集成 SHT30 和 QMP6988,用于检测温度、湿度、大气压值数据。SHT30 是高精度低功耗的数字温湿度传感器,并支持 I2C 接口 ( SHT30: 0x44,QMP6988: 0x70 )。QMP6988 是一款专为移动应用而设计的绝对气压传感器,具有较高的精准度与稳定性,适用于环境数据采集检测类型的项目。image.png

使用I2C总线,首先要在数码派中打开I2C接口。

sudo raspi-config

image.png

image.png

image.png

通过i2c-tools工具可以查看系统的I2C总线,可以看见有两个I2C总线,传感器挂载在I2C1上。这里传感器我是连接在3、5脚上。

image.png

系统中已经有python 3.13,所以可以直接使用python进行编程。

# @Author    :Aramy
# 温湿度计,使用SHT30

import time
import smbus
BUS = smbus.SMBus(1)
addr=0x44

# sht30
def read_value():
    BUS.write_byte_data(addr,0xe0,0x0)
    time.sleep(1)
    data = BUS.read_i2c_block_data(addr,0x0,6) 
    rawT = ((data[0]) << 8) | (data[1])
    rawR = ((data[3]) << 8) | (data[4])
    temp = -45 + rawT * 175 / 65535
    RH = 100 * rawR / 65535
    return temp,RH
 
def init_sht30():
    try:
        BUS.write_byte_data(addr,0x23,0x34)
        time.sleep(0.5)
    except:
        return False
    else:
        return True        

if __name__ == '__main__':
    init_sht30()
    while True:
        temp,rh=read_value()
        strtemp="温度:{:.1f}".format(temp)
        strrh="湿度:{:.1f}".format(rh)
        print(strtemp,'  ',strrh)
        time.sleep(1)

image.png


串口使用。树莓派 Zero2W 板载两个 UART,分别是:UART0:PL011 硬件串口(/dev/ttyAMA0)UART1:mini UART(/dev/ttyS0,功能受限,默认关闭)。但是折腾了好久,我这里只看见一个串口ttyS0,不知道是哪里做错了。

首先使用"sudo raspi-config"进行串口配置:

image.png

image.png

image.png

image.png

image.png

然后编辑文件"sudo vi /boot/firmware/config.txt",交换主/辅串口(把高性能 PL011 还给 GPIO)

image.png

最后将一个USB转TTL模块,与Zero2W的8、10脚进行连接。

image.png

使用python,做个简单的测试程序:

import serial, time
ser = serial.Serial('/dev/serial0', 115200, timeout=1)
while True:
    ser.write(b'Hello UART\r\n')
    time.sleep(1)
    if ser.in_waiting:
        print('Recv:', ser.readline())

image.png

即可实现串口通讯。但是这个Zero2W的串口资源,与树莓派比起来,少了很多。


SPI总线使用。这里SPI总线外设我是使用一块3寸4色墨水屏。

image.png

首先打开Zero2W的SPI总线。

image.png

image.png

image.png

微雪的墨水屏,有提供很详细的例子。直接运行微雪提供的例子,就能驱动起这个漂亮的墨水屏了。


树莓派连接引脚对应关系
e-PaperRaspberry Pi
BCM2835编码Board物理引脚序号
VCC3.3V3.3V
GNDGNDGND
DINMOSI19
CLKSCLK23
CSCE024
DC2522
RST1711
BUSY2418
wget  
unzip E-Paper_code.zip -d e-Paper
cd e-Paper/RaspberryPi_JetsonNano/python/examples
python epd_3in0g_test.py

2e832fdef9e38083134d9eba6903c661.jpg

452c0d5d0b3950cd3df25350b0656712.jpg

SPI总线驱动成功。


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]