Lập Trình Trên Raspberry Pi

CHÚ Ý:Từ 2019 colonyinvest.net gồm thêm một trang web mang lại riêng biệt Raspberry Pi với phát triển thành website chủ yếu về Raspberry Pi tại colonyinvest.net, những công bố về thành phầm - thông tin update về Raspberry Pi - Bài viết kỹ thuật cung cấp đến Raspberry Pi, ... colonyinvest.net update trên website:pivietnam.com.vn

colonyinvest.net trân trọng thông báo cho tới quý khách hàng hàng!!!

*

Các bạn có thể xem thêm những bài viết cung cấp chuyên môn với những tin tức mới nhất ở phần "tin tức"bên trên website PVIETNAM.COM.VN

*

Bài viết cung ứng nghệ thuật tại trang web PIVIETNAM.COM.cả nước - Bài 4: Lập trình Raspberry áp dụng cổng truyền thông(Link here)

Giao tiếp qua cổng UART cùng với Raspberry Pi

1. Giới thiệu UART bên trên Raspberry Pi

Để Setup UART mang lại Pi cần sử dụng vào liên kết với các MCU không giống, những chúng ta cũng có thể xem thêm lí giải trong Clip sau :

2. Giao tiếp UART với Raspberry Pi

*

Hình 1 : chân GPIO của Raspberry Pi 2 Mã Sản Phẩm B

Dưới đây là nhì ví dụ đơn giản và dễ dàng tiếp xúc thân Raspberry cùng Arduino Vn01:

- lấy ví dụ như 1 : Gửi chuỗi ký kết từ bỏ tự Raspberry cho tới Arduino.

Bạn đang xem: Lập trình trên raspberry pi

- lấy ví dụ 2 : Gửi chuỗi ký kết từ bỏ trường đoản cú Arduino tới Raspberry.

Thông tin : raspberry Pi 2 mã sản phẩm B vàArduinoVn01

2.1 Kết nối phần cứng

Kết nối giữa Arduino với Pi như sau : RX của arduio TX của Pi và ngược lại TX của arduino RX của Pi, liên kết chung 2 chân GND cùng nhau.

2.2.1 Lập trình tiếp xúc UART

Chuẩn bị thỏng viện cho C là wiring-pi nlỗi vào bài 1 vẫn đề cùa đến.

Tlỗi viện mang đến pythanh mảnh là pySerial

suvì apt-get install python-seriallúc nên sử dụng tlỗi viện chỉ cần thực hiện “import serial”

a. Lập trình bằng C

lấy ví dụ 1

Chương trình “uart-skết thúc.c” bên trên Raspberry

// Compile : gcc -Wall uart-sover.c -o uart-sover -lwiringPi#include #include #include #include #include #include int main() int fd;printf("Raspberry"s sending : ");while(1) if((fd = serialmở cửa ("/dev/ttyAMA0", 9600)) 0 )fprintf (stderr, "Unable lớn open serial device: %s ", strerror (errno));serialPuts(fd, "hello");serialFlush(fd);printf("%s ", "hello");fflush(stdout);delay(1000);return 0;Chương thơm trình bên trên Pi đang gửi chuỗi cam kết trường đoản cú “hello” trải qua uart cho tới arduino. Nó đã gửi liên tục sau 1s.

Thư viện thực hiện : #include

- Msinh sống cổng liên kết Serial.

int serialOpen (char *device, int baud);

Luôn hãy nhớ là cổng uart có tên là ttyAMA0. Hàm này đã trả về file-descriptor. Nễu file-descritor lỗi sẽ sở hữu giá trị là -1.

- Hàm gửi dữ liệu

Void serialPutchar (int fd, unsigned char c) ;

Hàm này gửi đã gửi 1 byte. Nếu mong muốn gửi một mảng (hoặc chuỗi ký tự) rất có thể thực hiện hàm sau.

void serialPuts (int fd, char *s) ;

- Hàm void serialFlush (int fd) : đợi đến khi tài liệu được gửi ngừng hoặc bỏ qua mất toàn bộ tài liệu được thân tặng. Hàm này khôn cùng bắt buộc với uart, nếu như không tồn tại sẽ không thể gửi đúng đắn được. Quý Khách đề nghị bỏ hàm này đi và coi test. Có lẽ đó là một bug nhỏ dại so với chương trình này vị xứng đáng lý ra lịch trình sau khi triển khai lệnh gửi tài liệu hoàn toàn có thể thực hiện tức thì nhanh chóng lệnh tiếp theo sau, tài liệu sẽ được uart auto ngầm gửi đi. Chương thơm trình không nhất thiết phải đợi.

Các hàm được cung cấp : wiringPi

Để compile được lịch trình tiến hành lệnh

gcc -Wall uart-send.c -o uart-skết thúc -lwiringPiChương trình “uart-receive sầu.ino” trên Arduino

void setup() Serial.begin(9600); // opens serial port, baudrate : 9600 bpsvoid loop() if (Serial.available() > 0) String str = Serial.readString(); Serial.print("Received: "); Serial.println(str); - Khởi chế tạo ra Uart :

Serial.begin(9600);

Lưu ý rằng baudrate bởi 9600 giống hệt như trên Pi.

- Hàm chất vấn coi bao gồm dữ liệu tới uart không :

Serial.available()

Hàm này trả về số byte cảm nhận.

- Đọc dữ liệu chuỗi cam kết trường đoản cú :

Serial.readString();

Trả về tài liệu dạng hình String.

Xem thêm: Kính Thực Tế Ảo Vr Case Mini Box, Kính Thực Tế Ảo Vr Case V3

- Lưu ý:

Serial.print();

Mục đích nhằm hiện lên lên màn hình hiển thị tác dụng, dẫu vậy nó gửi vào Uart bắt buộc cũng đồng thời nó gửi dữ liệu tới Pi.

Kết quả :

*

lấy một ví dụ 2

Chương thơm trình “uart-receive.c” bên trên Raspberry

// Compile : gcc -Wall uart-receive sầu.c -o uart-receive sầu -lwiringPi#include #include #include #include #include #include int main() int fd;char c;printf("Raspberry"s receiving : ");while(1) if((fd = serialmở cửa ("/dev/ttyAMA0", 9600)) 0 )fprintf (stderr, "Unable to open serial device: %s ", strerror (errno)) ;elsedoc = serialGetchar(fd);printf("%c",c);fflush (stdout);while(serialDataAvail(fd));return 0;- Kiểm tra xem gồm dữ liệu tới không :

int serialDataAvail (int fd);

Hàm này trả về số byte dữ liệu lộ diện. Trả về -1 ví như bị lỗi.

- Đọc dữ liệu

int serialGetchar (int fd);

Trả về một byte dữ liệu tới. Con trỏ của nó vẫn trường đoản cú tăng sau những lần Điện thoại tư vấn. Hàm đang hóng tới tận 10s ví như không có dữ liệu. Trả về -1 giả dụ bị lỗi.

Cmùi hương trình “uart-send.ino” bên trên Arduino

void setup() // put your cài đặt code here, khổng lồ run once:Serial.begin(9600);void loop() // put your main code here, khổng lồ run repeatedly:Serial.println("arduino say hello!");delay(1000);Kết quả :

*

b.Lập trình Python

Xem một vài ví dụ về tlỗi viện serial

lấy ví dụ như 1

Chương trình “uart-sover.py” trên Raspberry

#!/usr/bin/python3import timeimport serialser = serial.Serial(port = "/dev/ttyAMA0",baudrate = 9600,parity = serial.PARITY_NONE,stopbits = serial.STOPBITS_ONE,bytekích thước = serial.EIGHTBITS,timeout = 1)print("Raspberry"s sending : ")try: while True: ser.write(b"hehe") ser.flush() print("hehe") time.sleep(1)except KeyboardInterrupt:ser.close()- Thiết lập serial

serial.Serial()

Nếu cần yếu khởi tạo nên Serial được sau timeout thì vẫn thông báo lỗi. Ở phía trên đặt timeout = 1s.

- Gửi tài liệu :

int write(data);

Hàm nãy rất có thể gửi nhiều byte dữ liệu đồng thời. Hàm trả vtrần là số byte đã gửi.

- Hàm flush()

Cũng như cùng với công tác C, yêu cầu flush nếu như không serial sẽ không gửi đúng.

- Đóng Serial

close();

Nếu có interrupt xẩy ra, ví dụ như CTR+C thì công tác đang bắt được sự kiện kia cùng vẫn đóng góp serial. Lí vày do Serial sẽ không còn từ bỏ đóng góp lại Lúc công tác bị ngắt ko kiểm soát điều hành. vì thế nó đã tiếp tục được msinh hoạt cùng không chất nhận được lịch trình nào không giống áp dụng nó –> lịch trình chạy có khả năng sẽ bị lỗi làm việc lần tiếp theo.

Đây là pynhỏ bé version 3 nên khi chạy các bạn tiến hành lệnh

python3 uart-sover.pyKết quả giống như nhỏng lịch trình C

Ví dụ 2

Chương trình “uart-receive.py” trên Raspberry

#!/usr/bin/python3import timeimport serialser = serial.Serial(port = "/dev/ttyAMA0",baudrate = 9600,parity = serial.PARITY_NONE,stopbits = serial.STOPBITS_ONE,byteform size = serial.EIGHTBITS,timeout = 1)print("Raspberry"s receiving : ")try: while True: s = ser.readline() data = s.decode()# decode s data = data.rstrip()# cut " " at last of string print(data)# print stringexcept KeyboardInterrupt:ser.close()- Đọc dữ liệu

readline()

Hàm trả về là hồ hết byte phát âm được. Hàm đọc kết thúc cùng với timeout=1 được thiết lập cấu hình trên.

- Lưu ý :

Ở trên gồm áp dụng 2 hàm tiếp sau đây trước lúc hiển thị kết quả

data=s.decode()

data=data.rstrip()

Mọi người yêu cầu chất vấn hiệu quả lúc không tồn tại 2 hàm trên nhằm phát âm thêm về tác dụng cảm nhận.

Kết quả tương tự như cùng với công tác C

3. Sử dụng Output USB nhằm kết nối

Uart được Raspberry Pi với mục đích log mang lại kernel. Nếu khá đầy đủ thốn tuyệt bắt buộc phải áp dụng cổng uart những bạn cũng có thể chuyển sang cổng usb nhằm sửa chữa thay thế. Với hệ điều hành và quản lý linux những kênh xuất nhập đầy đủ hoàn toàn có thể kết nối thông qua file-descriptor, mặc dù uart tuyệt usb thì chỉ cân biến đổi file-descriptor thì rất có thể liên kết tới nó. Toàn bộ code bên trên có thể sử dụng kết nối qua USB, chỉ cần nuốm “ttyAMA0” bằng thương hiệu cổng tiếp nối USB gồm dạng “ttyUSB*”. Các chúng ta cũng có thể kết nối arduino cùng với lắp thêm USB-TTL nhỏng PL2303 và tiếp đến cắm vật dụng vào Pi qua cổng tiếp nối USB là rất có thể liên kết. Lưu ý đấy là sử dụng cổng tiếp nối USB nhằm kết nối chứ chưa hẳn kết nối trả tòan bởi giao thức USB do phía mặt arduino áp dụng cách làm uart.

Khi PL2303 kết nối tới Raspberry, yêu cầu bình chọn sản phẩm công nghệ đang nằm tại USB nào

dmesg | grep ttyKết quả đang trả về các Serial trên Pi. Trong đó sẽ sở hữu hiệu quả dạng như mặt dưới: