3.3.3. Một số lệnh cơ bản trên hệđiều hành Raspbian
Người sử dụng Linux nói chung hay hệ điều hành Raspbian nói riêng thường có thói quen cài đặt/chỉnh sửa/thiết lập mọi thứ thông qua các câu lệnh vì nó giúp bạn khơng cần phải cài hay mở giao diện đồ họa vừa tốn tài nguyên vừa có cảm giác chậm chạp, bên cạnh đó cảm giác gõ lệnh trên Linux cũng khá là thú vị.
Tuy nhiên, không phải ai mới làm quen với Raspbian cũng biết các lệnh căn bản hoặc thậm chí nhiều người sử dụng lâu năm nhưng không thể nhớ hết được mọi câu lệnh của hệ điều hành. Dưới đây là một số câu lệnh thông dụng và căn bản nhất trên Raspberry Pi chạy hệ điều hành Raspbian.
Có 2 chế độ người sử dụng trên Linux nói chung, một là chế độ người dùng với quyền truy cập cơ bản, và một chế độ với quyền truy cập quản trị viên (còn được gọi là root). Một số lệnh hoặc hành động không thể thực hiện với quyền cơ bản và bạn sẽ cần phải đăng nhập vào chế độ root để thực hiện chúng. Do đó bạn sẽ thường xuyên thấy tiền tố “sudo” trước câu lệnh, có nghĩa là bạn đang nói với Raspbian rằng tơi cần thực thi các lệnh với quyền của root.
apt-get update: Cập nhật phiên bản Raspbian.
apt-get upgrade Nâng cấp tồn bộ các gói phần mềm
đã cài đặt trên Raspbian
poweroff Tắt Raspberry Pi
raspi-config Mở menu thiết lập cấu hình
Raspberry Pi hay Raspbian
reboot Khởi động lại Raspberry Pi
shutdown -h now Tắt Raspberry Pi ngay lập tức startx Mở giao diện đồ họa của Raspbian
(nếu bạn đang ở giao diện console)
cd /abc/xyz Di chuyển từthư mục hiện tại sang
thư mục /abc/xyz
ls -la Hiển thị danh sách các file trong
folder với các thông tin file size, ngày sửa, quyền hạn của file
trong folder hiện tại
rm example.txt Xóa file example.txt
rmdir example_directory Xóa thư mục example_directory (nếu
thư mục này đang trống)
touch Tạo file trắng mới trong folder hiện
tại
ifconfig Kiểm tra tình trạng mạng hiện tại trên
Raspberry Pi. Bạn có thể biết IP của Raspberry Pi nếu đang kết nối
wget
http://www.website.com/example.txt
Tải file example.txt từ trên mạng về và lưu vào folder hiện tại
vcgencmd get_mem arm && vcgencmd get_mem gpu
Hiển thị thông tin RAM của CPU và GPU.
Hy vọng với danh sách các lệnh này sẽgiúp các bạn làm quen
với Raspberry Pi nhanh hơn, sử dụng hiệu quả hơn
dpkg –get-selections: Hiển thị toàn bộ
các phần mềm đã cài trên Raspberry Pi.
Hiển thị toàn bộ các phần mềm đã cài trên Raspberry Pi
Bảng 3.2: Các lệnh cơ bản HĐH Raspbian
3.3.4. Lập trình GPIO trên Raspberry Pi
Một trong những ứng dụng chủ yếu của Raspberry Pi là sử dụng trong các thiết bị điều khiển tự động. Để tiến hành điều khiển, đọc, nhận dữ liệu từ các
thiết bị bên ngoài chúng ta cần thao tác với các chân cắm mở rộng trên kit Raspberry Pi
Để sử dụng, điều khiển các chân cắm mở rộng GPIO trên kit Raspberry Pi một cách đơn giản và dễ hiểu người ta thường sử dụng bộ thư viện WiringPI. WiringPi là một thư viện truy cập GPIO viết bằng C cho BCM2837 sử dụng trong Raspberry Pi. Nó được phát hành theo giấy phép GNU LGPLv3 và là có thể sử dụng từ C và C ++ và nhiều ngôn ngữ khác. Với bộ thư viện này, chúng ta có thể lập trình vào ra cơ bản cho từng chân của Raspberry Pi, hoặc có thể cấu hình, tổ hợp cácchân để làm các tính năng chuyên biệt như : điều chế độ rộng xung PWM, giao tiếp UART, SPI, I2C… Và nhiều tính năng khác nữa.
Để sử dụng được bộ thư viện WirringPi cho lập trình GPIO việc đầu tiên là phải tiến hành cài đặt bộ thư viện này vào kít Raspberry Pi chạy hệ điều hành Raspbian. Các bước cài đặt này như sau:
Bước 1: Cài đặt chương trình download dữ liệu GIT. Mở terminal gõ lệnh:
pi@raspberrypi:~$sudo apt-get install git-core
Bước 2: Doawnload bộthư viện và các ví dụ về wiringPi về kit bằng cách gõ lệnh:
pi@raspberrypi:~$git clonegit://git.drogon.net/wiringPi
Sau khi download, thư viện wiringPi sẽ nằm trong thư mục<strong>/home/Pi.
Bước3: Chuyển đến thư mục wiringPi để tiến hành Build thư viện này.
pi@raspberrypi:~ $ cd wiringPi pi@raspberrypi:~$./build
Sau khi tiến hành cài đặt theo các bước trên bộthư viện wiringPi sẽđược cài đặt trên máy. Để kiểm tra xem q trình cái đặt có thành cơng hay khơng ở cửa sổ Teminal gõ lệnh :
pi@raspberrypi:~$gpio–v
Sử dụng hai lệnh trên tại cửa số teminal sẽ hiển thị ra phiên bản wiringPi và cấu hình các chân hiện tại của kit Raspberry Pi
VD lập trình bật tắt LED: #include <wiringPi.h> int main(void) { wiringPiSetupGpio(); pinMode(17, OUTPUT); while(1){ digitalWrite(17, HIGH); } return 0; 3.3.5. Lập trình socket
3.3.5.1. Giới thiệu về mơ hình client/server
Là mơ hình phổ biến cho giao tiếp giữa 2 tiến trình/2 máy, trong đó, tiến trình client kết nối đến tiến trình server để yêu cầu trao đổi dữ liệu.
Client cần biết về sự tồn tại và địa chỉ của tiến trình server, nhưng server khơng cần biết về sự tồn tại và địa chỉ của client cho đến khi kết nối được thiết lập.
Mỗi khi kết nối được thiết lập, cả 2 bên đều có thể trao đổi (gửi và nhận dữ liệu).
Để thiết lập một kết nối cho cả 2 phía, cần xây dựng một socket. Có thể hiểu socket như một điểm đầu cuối của kênh kết nối giữa 2 tiến trình. (Giống như là thực hiện một kết nối giữa 2 người trong một cuộc gọi điện thoại)
Các hệ thống (linux, windows) đều cung cấp các hàm hệ thống để thực hiện thiết lập một socket.
3.3.5.2. Các loại socket
Có 2 loại socket được sử dụng rộng rãi là: stream sockets và datagram sockets:
Stream sockets: Dựa trên giao thức TCP (Tranmission Control Protocol), là giao thức hướng luồng (stream oriented). Việc truyền dữ liệu chỉ thực hiện giữa 2 tiến trìnhđã thiết lập kết nối. Giao thức này đảm bảo dữ liệu
được truyền đến nơi nhận một cách đáng tin cậy, đúng thứ tự nhờ vào cơ chế quản lý luồng lưu thông trên mạng và cơ chế chống tắc nghẽn.
Datagram sockets: Dựa trên giao thức UDP (User Datagram Protocol), là giao thức hướng thông điệp (message oriented). Việc truyền dữliệukhơng u cầu có sự thiết lập kết nối giữa tiến quá trình. Ngược lại với giao thức TCP thì dữ liệu được truyền theo giao thức UDP khơng được tin cậy, có thế khơng đúng trình tự và lặp lại. Tuy nhiên vì nó khơng u cầu thiết lập kết nối khơng phải có những cơ chế phức tạpnên tốc độ nhanh…ứng dụng cho các ứng dụng truyền dữ liệu nhanh như chat, game,...
3.3.4.3. Thiết lập socket
Các bước thiết lập một socket phía client gồm: Tạo một socket bằng hàm socket()
Kết nối socket đến địa chỉ của server bằng hàm connect()
Gửi và nhận dữ liệu: Có một số cách khác nhau, đơn giản nhất là sử dụng các hàm read() và write()
Đóng kết nối bằng hàm close()
Các bước thiết lập một socket phía server gồm: Tạo một socket bằng hàm socket()
Đối với server trên internet địa chỉ bao gồm địa chỉ ip của máy host + số hiệu cổng dịch vụ (port number)
Lắng nghe (listen) các kết nối đến từ clients sử dụng hàm listen()
Chấp nhận các kết nối sử dụng hàm accept(). Hàm này sẽ dừng (block) cho đến khi nhận được một client kết nối đến.
Gửi và nhận dữ liệu với client (hàm read(), write())
Đóng kết nối bằng hàm close()
Kết luận chương
Chương 3 trình bày về tổng quan máy tính nhúng Raspberry Pi. Cấu trúc phần cứng, chức năng và bộ nhớ RAM … Ngồi ra cịn giới thiệu về Raspbian, hệ điều hành hoạt động trên Raspberry Pi 3. Các tập lệnh cơ bản trên Raspbian và tổng quan về lập trình socket.
CHƯƠNG 4
THIẾT KẾ CHƯƠNG TRÌNH TRUYỀN ÂM THANH QUA MẠNG 4G
4.1. Phân tích bài tốn 4.1.1. Mơ hình bài tốn
Dựa trên yêu cầu của đồ án truyền dữ liệu qua mạng 4G mà dữ liệu ở đây em dùng là âm thanh(audio). Để truyền nhận ta cần tạo chương trình gồm có 1 server và 1 client để trao đổi dữ liệu cho nhau, ở đây em dùng 1 PC làm server và Board Raspberry Pi làm client được kết nối theo hình 4.1
Hình 4.1: Mơ hình bài tốn Chức năng các thành phần trên: