Điều khiển GPIO Pi4 với Java
Về cơ bản tôi đang cố gắng bật đèn led bằng cách sử dụng thư viện pi4j. Mã của tôi khá đơn giản:
public static void main(String args[]) throws InterruptedException {
GpioController gpioController = GpioFactory.getInstance();
GpioPinDigitalOutput pinOut = gpioController.provisionDigitalOutputPin(RaspiPin.GPIO_17);
pinOut.high();
Thread.sleep(5000);
pinOut.low();
}
Tôi đang xuất tệp jar từ máy tính của mình, sao chép sang Raspberry Pi 4 của tôi hơn là chạy trong đó.
Để kiểm tra xem đèn led của tôi không bị hỏng hoặc GPIO đã được thiết lập hay chưa, tôi đã thực thi các tập lệnh Python sau đây và tôi thấy đèn led hoạt động hoàn hảo:
python
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.output(17,True)
Tôi đang thiếu gì?
Trả lời
Thật vậy, như đã đề cập trong các bình luận, Pi4J đang sử dụng một sơ đồ đánh số pin khác. "Under the hood", WiringPi được sử dụng để điều khiển các GPIO. Thư viện này sử dụng một sơ đồ đánh số khác. Điều này có nghĩa là chân 17 của BCM bạn đang sử dụng trong Python là chân 0 trong lược đồ WiringPi.
Xem bảng đầy đủ bên dưới với BCM, WiringPi và cách đánh số pin vật lý (xem liên kết 2 bên dưới).
Bên cạnh đó, hệ thống dây bên trong của Raspberry Pi 4 khác so với các hệ thống trước, vì vậy bạn sẽ cần nâng cấp WiringPi của mình lên phiên bản 2.52 mới nhất với:
$ gpio -v
gpio version: 2.50
$ cd /tmp
$ wget https://project-downloads.drogon.net/wiringpi-latest.deb
$ sudo dpkg -i wiringpi-latest.deb
$ gpio -v
gpio version: 2.52
Một lưu ý nhỏ: chúng tôi đang làm việc trên một phiên bản mới của Pi4J, phiên bản này sẽ giúp mọi thứ trở nên dễ dàng hơn, nhưng vẫn đang trong quá trình thực hiện ... ;-)
Thông tin thêm trong các bài đăng trên blog của tôi về: