openSUSE:JoyPi
JoyPi 是一个基于 Raspberry Pi 3B/3B+/4B 的实验性外壳。更多信息请参见 https://joy-it.net/en/products/rb-joypi
您可以下载
特性
- 显示屏:7" 触摸屏显示屏(分辨率:1024x600),8x8 LED 矩阵,16x2 LED 模块,4 位段显示屏
- 摄像头:2MP USB 摄像头
- 传感器:光传感器、声音传感器、运动传感器、超声波传感器、倾斜传感器、红外传感器、触摸传感器、DHT11 温度和湿度传感器、RFID 模块、倾斜传感器
- 按钮:可编程 4x4 按钮矩阵、4 个独立按钮、16 个开关
- 电机:舵机控制、舵机、步进电机
- 其他模块:GPIO LED 指示灯、面包板、振动单元、蜂鸣器、继电器
- 配件:迷你键盘和 USB 接收器、电源、GPIO 电缆、microSD 卡、RFID 芯片、RFID 卡、USB 电缆、遥控器、RPI 4B 的微型 HDMI 适配器
设置
硬件设置
请按照 简短手册中的说明 正确安装硬件。
软件设置
您可以根据系统上使用的板子,使用任何可启动的 openSUSE 镜像来启动 RPi3 或 RPi4。
我建议使用 XFCE 镜像作为基础。然后,您可以
- 添加非 root 用户:以 root/linux 身份登录,并启动 yast2 users 以添加新用户。您可以将一些组添加到此用户:video、dialout
- 通过遵循 openSUSE:I2C#Load_i2c-dev_kernel_module 启用 I2C 访问,并通过将以下行添加到 /boot/efi/extraconfig.txt 启用 i2c-1 访问
# Enable I2C access from Linux dtparam=i2c_arm=on # Uncomment following line to set i2c-1 baudrate to 400 000 Hz (default i2c-1 baudrate is 100 000 Hz) # dtparam=i2c_arm_baudrate=400000
- 通过遵循 openSUSE:SPI#Load_spidev_kernel_module 启用 SPI 访问,并通过将以下行添加到 /boot/efi/extraconfig.txt 启用 spidev 访问
# Enable SPI access from Linux dtparam=spi=on
- 安装一些有用的工具
sudo zypper in fswebcam libgpiod i2c-tools spi-tools htop v4l-tools v4l-utils vlc python3-gpiod python3-smbus python3-spidev git
- 一些测试示例托管在 https://github.com/ggardet/joypi,因此您可以使用以下命令下载它们
git clone https://github.com/ggardet/joypi
设备
7" 触摸屏
启动 openSUSE 镜像后,将使用 7" 屏幕。无需进行任何配置。在 openSUSE 启动后,您可以像使用鼠标一样使用触摸屏。
USB 摄像头
使用 v4l2-ctl --all 检查是否检测到 USB 2.0 PC Camera: PC Camera。
您可以使用以下命令拍摄 1280x1024 图片
fswebcam -r 1280x1024 --no-banner image1.jpeg
或
streamer -s 1280x1024 -f jpeg -o image2.jpeg
或者,使用 vlc,单击 媒体 > 打开捕获设备...,在 视频设备名称 中选择 /dev/video0,然后单击 播放。
GPIO/LED
对于 40-pin 连接器 的大多数引脚,您都有一个 LED 来显示输出的当前状态。
您可以使用以下命令打开 pin7 (gpio4) 的 LED 3 秒
gpioset -m time -s 3 -l gpiochip0 4=1
有关更多详细信息,请参阅 openSUSE:GPIO。
触摸传感器:pin11 (gpio17)
触摸传感器位于 pin11 (gpio17)。获取输入值(0 表示未触摸,1 表示正在触摸)
gpioget gpiochip0 17
蜂鸣器:pin12 (gpio18)
蜂鸣器位于 pin12 (gpio18)。使用以下命令蜂鸣 1 秒
gpioset -m time -s 1 gpiochip0 18=1
红外接收器:pin38 (gpio20)
您必须按照硬件手册中的说明插接红外接收器。在关闭外壳之前,您需要将其移除。
对于 Raspberry Pi,您需要将以下行添加到 /boot/efi/extraconfig.txt
# Enable IR receiver on gpio20 dtoverlay=gpio-ir,gpio_pin=20
您可以通过按下套件中提供的红外遥控器上的某些按键并检查连接到 pin38 (gpio22) 的 LED 在您按下按键时是否闪烁来检查您的硬件是否正确设置。
继电器:pin40 (gpio21)
继电器位于 pin40 (gpio21)。使用以下命令打开继电器 10 秒
gpioset -m time -s 10 -l gpiochip0 21=1
倾斜传感器:pin15 (gpio22)
倾斜传感器允许我们检测向右或向左的倾斜。
倾斜传感器位于 pin15 (gpio22),但您需要打开右侧 DIP 开关上的开关 2,将其他开关设置为 OFF。读取传感器返回的值(0 表示向右倾斜,1 表示向左倾斜)
gpioget gpiochip0 22
运动传感器:pin16 (gpio23)
运动传感器位于 pin16 (gpio23)。读取传感器返回的值(0 表示未检测到任何东西,1 表示传感器前方有东西移动)
gpioget gpiochip0 23
可以使用螺丝刀通过 MOTION 区域附近的透明盖上的电位器 R125 调整灵敏度。
振动器:pin13 (gpio27)
振动器位于 pin13 (gpio27)。使用以下命令打开振动器 4 秒
gpioset -m time -s 4 gpiochip0 27=1
步进电机:pins 29,31,33,35 (gpio 5, 6, 13, 16)
步进电机是 28BYJ-48 5VDC。为了使用它,您需要将正确的 DIP 开关 3-6 设置为 ON,其他开关设置为 OFF。
要移动转子,您需要按照以下步骤操作。完成第 8 步后,循环到第 1 步。
如果您想朝相反方向转动,只需倒退(从第 8 步到第 1 步)。
| 引脚 / GPIO | 初始化 | 第 1 步 | 第 2 步 | 第 3 步 | 第 4 步 | 第 5 步 | 第 6 步 | 第 7 步 | 第 8 步 |
|---|---|---|---|---|---|---|---|---|---|
| A / gpio5 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
| B / gpio6 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
| C / gpio13 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| D / gpio19 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
您需要移动 512 步才能完成 360°(一圈)。
7 段显示屏
7 段显示屏由 HT16K33 (数据表) 在 i2c-1 总线上,地址为 0x70 驱动。
- 第一个数字(从左边开始)由寄存器 0x00 定义
- 第二个数字(从左边开始)由寄存器 0x02 定义
- 两个点(小时和分钟分隔符)由寄存器 0x04 定义(设置为 0x00(关闭)或 0x02(打开))
- 第三个数字(从左边开始)由寄存器 0x06 定义
- 第四个数字(从左边开始)由寄存器 0x08 定义
| 名称 | DP | G | F | E | D | C | B | A |
| 位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
对于每个数字,寄存器的值设置一个段。值为 0 将段设置为 ON,值为 1 将段设置为 OFF。
因此,如果您想显示一个 0,您需要将 A、B、C、D、E、F 设置为 ON,这将是二进制值 b0011_1111,即十六进制中的 0x3F。因此,对于第二个数字,它将是
i2cset -y 1 0x70 0x02 0x3F
并且有特殊的寄存器来启用/禁用 7 段显示屏并使其闪烁。
- 启用显示(不闪烁):写入特殊命令 0x81
i2cset -y 1 0x70 0x81
- 禁用:写入特殊命令 0x80
i2cset -y 1 0x70 0x80
- 闪烁
- 2 Hz:写入特殊命令 0x83
i2cset -y 1 0x70 0x83
- 1 Hz:写入特殊命令 0x85
i2cset -y 1 0x70 0x85
- 0.5 Hz:写入特殊命令 0x87
i2cset -y 1 0x70 0x87
RFID-RC522 (SPI0.0)
- MFRC522 数据表
- MFRC522-python(未经测试)
有关 SPI 的更多信息,请参阅 openSUSE:SPI。
8x8 LED 矩阵 (SPI0.1)
8x8 LED 矩阵由 MAX7219 (数据表) 驱动,连接到 SPI0.1(总线 0,片选 1),最大运行速度为 10 MHz。
通过切换所有 LED(测试模式)测试显示
echo -n -e "\x0F\x01" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd
并切换回正常模式
echo -n -e "\x0F\x00" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd
LED 矩阵操作初始化
echo -n -e "\x0C\x01" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd # Normal operation echo -n -e "\x09\x00" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd # No decoding echo -n -e "\x0A\x0F" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd # Intensity: max 0x0F echo -n -e "\x0B\x07" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd # Make use of all leds # Switch off all leds echo -n -e "\x01\x00" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd # Row 1 echo -n -e "\x02\x00" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd # Row 2 echo -n -e "\x07\x00" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd # Row 3 echo -n -e "\x04\x00" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd # Row 4 echo -n -e "\x05\x00" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd # Row 5 echo -n -e "\x06\x00" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd # Row 6 echo -n -e "\x07\x00" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd # Row 7 echo -n -e "\x08\x00" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd # Row 8
现在您可以设置每一行的每个 LED。要设置第一行的最后 4 个 LED
echo -n -e "\x01\x0F" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd
要设置第二行的前 4 个 LED
echo -n -e "\x02\xF0" | spi-pipe -d /dev/spidev0.1 -s 10000000 | xxd
还有一个 Python 脚本演示如何在 Python 中使用它:https://github.com/ggardet/joypi/blob/master/joypi_led_matrix.py
您需要 python3-spidev 包。
有关 SPI 的更多信息,请参阅 openSUSE:SPI。
LCD 16x2 (i2c-1 0x21)
16x2 LCD 位于 i2c-1 总线上,地址为 0x21。它似乎类似于 I2C 16x2 Arduino LCD 显示模块,并且似乎由 MCP23008 驱动,具有以下连接
| PCA8574 引脚 | P7(输入/输出) | P6(输入/输出) | P5(输入/输出) | P4(输入/输出) | P3(输出) | P2(输出) | P1(输出) | P0(输出) |
| LCD 引脚(4 位模式) | B7 | B6 | B5 | B4 | BT(背光) | E | R/W | RS |
将 LCD 的所有 gpio 设置为输出
i2cset -y 1 0x21 0x00 0x00
将 BT 设置为 1 以启用背光
i2cset -y 1 0x21 0x09 0x80
将 BT 设置为 0 以禁用背光
i2cset -y 1 0x21 0x09 0x00
有关 I2C 的更多信息,请参阅 openSUSE:I2C。
光传感器 (i2c-1 0x5C)
i2c 光传感器位于 i2c-1,地址为 0x5C。它似乎是 Rohm BH1750FVI (数据表)。您可以使用以下命令从寄存器 0x20 获取原始值
i2cget -y 1 0x5c 0x20 w
要获得可读的 lux 值,您需要执行以下操作:(高字节 + 256 * 低字节) / 1.2。因此,如果您获得
0x9c00
0x9c 是十进制的 156,0x00 是十进制的 0。因此,您有 (156 + 256*0)/1.2 = 130 lx
还有一个 Python 脚本可以直接打印 lx 值:https://github.com/ggardet/joypi/blob/master/joypi_light_sensor.py
您需要 python3-smbus 包。
有关 I2C 的更多信息,请参阅 openSUSE:I2C。
温度和湿度传感器 (1-wire on gpio4, pin7)
在您的 /boot/efi/extraconfig.txt 文件中,您需要添加以下行以在启动时启用 1-wire 接口(在 gpio4 上)
# Enable 1-wire interface on gpio4 dtoverlay=w1-gpio
重新启动后,检查 /sys/bus/w1/devices/ 是否有 w1_bus_master1,以及可能还有从设备。
有关 1-wire 接口的更多信息,请参阅 openSUSE:1-wire。