40 0 1MB
Tài liệu học Raspberry Pi Sưu tập: http://dandientu.com Nguồn http://www.raspberrypivietnam.com/hoc-raspberry-pi-tu-a-z/ Tài liệu học Raspberry Pi thì đã có nhiều tuy nhiên đa số đều viết bằng tiếng Anh. Ở đây mình sẽ tập hợp tất cả bài viết và giới thiệu các nguồn tài liệu hay để các bạn mới học Raspberry Pi có thể nắm bắt nhanh nhất. Danh mục đang trong quá trình hoàn thiện nên mình viết tới đâu sẽ bổ sung tới đó. Các bạn muốn mình viết thêm phần nào thì cứ thoải mái comment ở dưới nha, mình sẽ cố gắng bổ sung.
1. 2. 3. 4. 5. 6. 7.
1. 2. 3. 4. 5.
1. 2.
1. 2. 3. 4.
1. 2.
Kiến thức cơ sở: Giới thiệu Raspberry Pi Cấu tạo của Pi ARM vs x86 Linux căn bản 20 command line cần biết trên Linux Web và vài điều căn bản Tìm hiểu firmware và raspi-config trên Pi Raspberry Pi căn bản: Cài đặt hệ điều hành Thực hành đầu tiên: bật tắt LED Viết ứng dụng gửi email bằng Python Dự báo thời tiết qua API Kết nối webcam, nhận diện khuôn mặt với SimpleCV Raspberry Pi nâng cao Project: Điều khiển thiết bị qua internet Project: Handmade time lapse camera Thủ thuật cho Pi: Gõ tiếng Việt trên Pi Điều khiển Pi từ xa bằng máy tính Chụp ảnh màn hình trên Pi Tùy chỉnh firmware và raspi-config Nên đọc thêm: Website và diễn đàn chính thức của Raspberry Pi : raspberrypi.org Tạp chí miễn phí về Raspberry Pi : The MagPi
Giới thiệu Raspberry Pi: chiếc máy tính tí hon kỳ diệu I. Raspberry Pi là gì? Raspberry Pi là một chiếc máy tính tí hon giá chỉ 25$ chạy hệ điều hành Linux ra mắt vào tháng 2 năm 2012. Ban đầu Raspberry Pi được phát triển dựa trên ý tưởng tiến sĩ Eben Upton tại đại học Cambridge muốn tạo ra một chiếc máy tính giá rẻ để học sinh có thể dễ dàng tiếp cận và khám phá thế giới tin học. Dự định khiêm tốn của ông đến cuối đời là có thể bán được tổng cộng 1000 bo mạch cho các trường học. Vậy thì điều 1
gì đã làm nên thành công ngoài sức tưởng tượng của Raspberry Pi khi đã bán được hơn một triệu bo mạch chỉ trong vòng chưa đầy một năm? 1. Raspberry Pi có mức giá quá hấp dẫn: 25$ cho một chiếc bo mạch có thể làm được hầu như mọi ứng dụng hằng ngày như lướt web, học lập trình, xem phim HD đến những ý tưởng mà bạn không ngờ đến như điều khiển robot, nhà thông minh..v.v. 2. Raspberry Pi chạy hệ điều hành Linux: 99% những thứ bạn làm trên máy tính Windows đều có thể thực hiện được trên Linux và quan trọng là: tất cả đều miễn phí! 3. Raspberry Pi có 8 ngõ GPIO: tức là bạn có thể kết nối và điều khiển các thiết bị trong cuộc sống thực tế như đèn, động cơ, GPS… Rất nhiều ứng dụng nhà thông minh đã sử dụng Raspberry Pi làm bộ điều khiển trung tâm. 4. Raspberry Pi có kích thước tí hon: chỉ tương đương một chiếc thẻ ATM và nặng chưa đầy 50 gram! Gắn với chiếc tivi, bạn có thể biến thành nó thành một thiết bị giải trí thông minh trong phòng khách. Gắn với màn hình và bàn phím, chuột, bạn có thể biến nó thành một chiếc máy tính đúng nghĩa. Nhỏ gọn và tiện lợi. 5. Cộng đồng Raspberry Pi phát triển rất nhanh trên thế giới: hầu hết những thắc mắc của bạn đều được giải đáp rất nhanh và còn hơn thế nữa: bạn có thể tìm thấy hàng ngàn dự án đã thực hiện và vô số ý tưởng độc đáo. Với nhưng ưu điểm độc đáo trên, Raspberry Pi đã vượt ra khỏi biên giới của trường học và trở thành thiết bị ưa thích của rất nhiều người đam mê điện tử và lập trình. Sự thành công của nó đã mở ra một bước phát triển mới cho tin học: đem máy tính và cảm hứng lập trình đến gần mọi người hơn bao giờ hết. Raspberry Pi có gì? Thiết kế phần cứng thông minh của Raspberry Pi là một trong những lý do khiến nó trở nên phổ biến. Hãy xem qua Raspberry Pi có gì:
2
1. Trái tim của Pi là à chip SOC (System-On-Chip) (System Broadcom BCM2835 chạy ạy ở tốc độ 700mHz. Chip này tương đương với v nhiều loại được ợc sử dụng trong smartphone phổ thông hiện nay, và có thể ể chạy được đ hệ điều hành Linux. Tích hợp trên ên chip này là nhân đồ họa (GPU) Broadcom VideoCore IV. GPU này đủ ủ mạnh để có thể ch chơi 1 số game phổ thông và à phát video chuẩn chu full HD. 2. 8 ngõ GPIO (General Purpose Input Output): đúng như tên gọi gọi của nó, từ đây bạn có thể kết nối và điều ều khiển rất nhiều thiết bị điện tử/cơ tử/c khí khác. 3. Ngõ HDMI: dùng để ể kết nối Pi với màn m hình máy tính hay tivi có hỗ ỗ trợ cổng HDMI. 4. Ngõ RCA Video (analog): khi thiết thi kế Pi người ta cũng tính đến trường ờng hợp ng người sử dụng ở các nước ớc đang phát triển không có điều kiện sắm một chiếc tivi đời mới tíc tích hợp cổng HDMI. Vì vậy ậy cổng video analog này n được thêm vào, giúp bạn ạn có thể kết nối với chiếc tivi đời cũ mà à không phải ph lo lắng. 5. Ngõ audio 3.5mm: kết ết nối dễ dàng d với loa ngoài hay headphone. Đối ối với tivi có cổng HDMI, ngõ âm thanh được ợc tích hợp theo đường tín hiệu HDMI nên ên không ccần sử dụng ngõ audio này. 6. Cổng USB: một ột điểm mạnh nữa của Pi là l tích hợp ợp 2 cổng USB 2.0. Bạn có thể kết nối với bàn phím, chuột ột hay webcam, bộ thu GPS..v.v qua đó có thể mở rộng phạm vi ứng 3
dụng. Vì Pi chạy Linux nên hầu hết thiết bị chỉ cần cắm-và-chạy (Plug-n-Play) mà không cần cài driver phức tạp. 7. Cổng Ethernet: cho phép kết nối Internet dễ dàng. Cắm dây mạng vào Pi, kết nối với màn hình máy tính hay tivi và bàn phím, chuột là bạn có thể lướt web dễ dàng! 8. Khe cắm thẻ SD: Pi không tích hợp ổ cứng. Thay vào đó nó dùng thẻ SD để lưu trữ dữ liệu. Toàn bộ hệ điều hành Linux sẽ hoạt động trên thẻ SD này vì vậy nó cần kích thước thẻ nhớ tối thiểu 4 GB và dung lượng hỗ trợ tối đa là 32 GB. 9. Đèn LED: trên Pi có 5 đèn LED để hiển thị tình trạng hoạt động. 10. Jack nguồn micro USB 5V, tối thiểu 700mA: nhờ thiết kế này mà bạn có thể tận dụng hầu hết các sạc điện thoại di động trên thị trường để cấp nguồn điện cho Pi. Linux căn bản trên Raspberry Pi Nhắc đến Linux là người ta nhắc đến sự tự do. Khác với Windows hay MacOS, mã nguồn mở của Linux cho phép người dùng có thể tiếp cận và tùy chỉnh toàn bộ mã nguồn tùy theo ý muốn, hoàn toàn miễn phí. Chính vì vậy Linux được chọn để sử dụng làm hệ điều hành cho Raspberry Pi. Dựa trên nền tảng Linux, nhiều bản phân phối (distribution) khác nhau được phát triển như Debian, Ubuntu, Fedora. Một trong số đó, Debian, được chỉnh sửa để hoạt động tối ưu trên Pi và được gọi là Raspbian (=Raspberry+Debian). Raspbian cũng là hệ điều hành được phát triển chính thức cho Pi. Hiện nay phiên bản Raspbian mới nhất là Raspbian Wheezy. Linux hoạt động trên 2 môi trường chính: môi trường Desktop (giống như Windows) và môi trường Terminal sử dụng command line (giống như DOS). Trước đây Linux hầu như chỉ hoạt động trên Terminal gây khó khăn cho người đã quen sử dụng Windows nhưng gần đây Linux đã chú ý phát triển giao diện đồ họa đẹp mắt không kém gì Windows 8 hay MAC. Trên Raspberry Pi được cài đặt sẵn giao diện LXDE (Light X11 Desktop Environment) là một môi trường đồ họa không ngốn nhiều tài nguyên, không đẹp long lanh nhưng vừa đủ để sử dụng. Để làm quen với Linux thì các bạn cần biết một số thuật ngữ cơ bản thường được sử dụng sau:
Command line: là câu lệnh thực hiện một chức năng nào đó trong Linux Shell: là nơi nhận command line, gửi đến kernel để tính toán và nhận kết quả trả về từ kernel Distribution: là bản phân phối của Linux. Thí dụ như Ubuntu, Debian, Fedora, ArchLinux… Package: chứa nhiều files và folder để cài chương trình, tương tự như phần mềm của Windows. Super user: tương đương với admin Root = super user Directory: tương đương với folder ở Windows GNU: tên của dự án phần mềm miễn phí, rất nhiều phần mềm của GNU được cài đặt cho Linux Bootloader: phần mềm chịu trách nhiệm load kernel của Linux khi khởi động.
4
20 command line cần biết trên Linux Command line rất quan trọng trong Linux vì sử dụng command line người dùng mới có thể can thiệp sâu vào hệ thống. Ngoài ra mặc dù Linux không yêu cầu cấu hình phần cứng cao như Windows và LXDE cung cấp hầu hết chức năng cơ bản của hệ điều hành, để thao tác nhanh và tận dụng hết sức mạnh của Pi thì sử dụng command line trên Terminal là rất cần thiết vì hệ thống không phải tốn tài nguyên cho giao diện đồ họa. Sau đây là 20 command line cần biết khi sử dụng Linux. Tuy nhiên các bạn không cần học thuộc lòng ngay một lúc mà hãy coi như đây là sổ tay các lệnh cần thiết để tra cứu mỗi khi gặp phải. man – manual guide. Hướng dẫn. Ví dụ bạn không biết lệnh cd là gì thì hãy gõ man cd startx – start x environment. Khởi động môi trường desktop X. ls – listing. Liệt kê tất cả file và folder hiện có trong thư mục cd – change directory. Chuyển sang thư mục khác mkdir – make directory. Giống như tạo New Folder trong Windows vậy rmdir – remove directory. Giống như lệnh delete trong Windows. mv – move. Di chuyển file hay folder. rm – remove. Tương đương với delete. pwd – print working folder. In đường dẫn đầy đủ của thư mục hiện hành. nano – open Nano text editor. Mở trình soạn thảo văn bản Nano, giống như Notepad ở Windows. sudo shutdown -h now Shutdown sudo reboot Khởi động (restart) lại máy tính sudo apt-get install Cài đặt phần mềm (package) mới sudo apt-get remove Gỡ bỏ (uninstall) package sudo apt-get purge Uninstall hoàn toàn. Kể cả những settings và log. sudo apt-get update Cập nhật danh sách package mới nhất sudo apt-get upgrade Nâng cấp tất cả package hiện có trong máy lên phiên bản mới nhất sudo apt-get autoclean Gỡ bỏ những file setting hay log không sử dụng sudo apt-get autoremove Dọn dẹp những package không dùng đến sudo apt-cache search Tìm kiếm 1 package đã được cài đặt hay chưa Nhóm lệnh thứ 2 liên quan đến những thao tác quan trọng trong hệ thống nên Linux yêu cầu người sử dụng phải làsuperuser (root) thì mới được thực hiện. Do đó ta phải thêm từ sudo (=superuser do) trước câu lệnh. Nếu không thêm sudo thì Linux sẽ từ chối thực hiện và kèm theo giải thích. Tips: gõ trên command line nghe có vẻ dài dòng so với click chuột trên desktop nhưng thực ra bạn có thể thao tác rất nhanh bằng cách nhấn phím Tab để Linux auto-complete câu lệnh của bạn. Ví dụ như muốn tắt máy thì chỉ cần gõ su nhấn Tab, Linux sẽ auto-
5
complete thành sudo rồi gõ shu nhấn Tab sẽ được shutdown. Sử dụng vài lần bạn sẽ thấy command line không khó như bạn tưởng đâu. Raspberry Pi căn bản Cài đặt hệ điều hành cho Raspberry Pi Sau bài giới thiệu Raspberry Pi và cấu tạo của nó đã có bạn nhắn hỏi mình cách thực hành với Pi. Khác với vi điều khiển có thể chạy ngay sau khi load chương trình điều khiển, Pi cần có hệ điều hành để hoạt động. Đây cũng là ưu điểm của Pi vì nó cho phép người tận dụng rất nhiều phần mềm và thiết bị ngoại vi để lập trình ứng dụng phức tạp một cách nhanh chóng. Ở bài viết này mình sẽ hướng dẫn các bạn cài đặt hệ điều hành cho Raspberry Pi một cách đơn giản bằng NOOBS. NOOBS (New Out Of Box Software) là gói hệ điều hành của Raspberry Pi hỗ trợ cài đặt nhanh. NOOBS chứa nhiều bản hệ điều hành khác nhau cho phép người dùng lựa chọn trong lúc cài đặt. Ở đây mình khuyên dùng bản Raspbian, cũng là hệ điều hành được hỗ trợ chính thức của Raspberry Pi. Cách cài đặt như sau: Chuẩn bị phần cứng: 1. Raspberry Pi model B (khuyên dùng vì có thêm 1 cổng USB và có cổng Ethernet) 2. Sạc điện thoại microUSB 5V tối thiểu 700mA. Thông số thường ghi trên thân sạc. 3. Thẻ nhớ: tối thiểu 4 GB. Tốt nhất là 8 GB hoặc hơn, tốc độ từ class 6 trở lên. 4. Bàn phím, chuột sử dụng cổng USB. Nếu có loại tích hợp 2-trong-1 thì càng tốt, tiết kiệm được 1 cổng USB như hình minh họa. Chuẩn bị phần mềm: 1. Download phần mềm SD Formatter tại đây (click I Agree ở cuối trang) rồi cài đặt bình thường. 2. Download hệ điều hành cho Raspberry Pi tại đây rồi giải nén.
6
Kết nối Raspberry Pi Thực hiện: 1. Format thẻ SD: gắn thẻ SD vào máy tính. Khởi động SD Formatter, chọn đúng thẻ ở phần Drive. Click Option, ở mục Format Size Adjustment chọn ON. Sau cùng, click Format. 2. Giải nén toàn bộ file NOOBS_v1_2_1.zip vào thẻ SD. Sau đó lấy thẻ ra gắn vào Raspberry Pi. 3. Kết nối Raspberry Pi với bàn phím, chuột, cáp internet, dây nối màn hình (HDMI hoặc RCA Video). Nếu muốn nối Pi với màn hình máy tính sử dụng cổng VGA thì có thể mua cáp chuyển HDMI->VGA. Kiểm tra kĩ một lượt trước khi cắm nguồn. 4. Cắm nguồn. Lúc này Pi sẽ tự khởi động hệ điều hành. Lưu ý: Raspberry Pi sẽ mặc định hiển thị qua ngõ HDMI nên nếu bạn sử dụng ngõ RCA Video thì sẽ không thấy hình. Muốn hiển thị đúng, bạn chọn 1 trong các phím sau trên bàn phím: phím 1: HDMI mode phím 2: HDMI safe mode phím 3: composite PAL mode (analog) phím 4: composite NTSC mode (analog) Mình đang dùng HDMI nên không gặp vấn đề gì về hiển thị, cắm là chạy thôi. Vậy nếu bạn sử dụng ngõ RCA video thì thử nhấn phím 3 hoặc 4 nha. 5. Pi sẽ tiến hành cài đặt hệ điều hành. Trong quá trình này sẽ có nhiều lựa chọn nhưng tốt nhất là bạn chọn hệ điều hành mặc định là Raspbian wheezy. Đây là hệ điều hành Linuxđược tối ưu để hoạt động trên Pi.
7
6. Cài đặt xong Pi sẽ hỏi bạn login và password. Mặc định login là pi và password là raspberry 7. Xong! Chúc mừng bạn đã cài đặt và khởi động Raspberry thành công! Lưu ý: Nếu bạn có chút thất vọng vì màn hình màu đen buồn tẻ (Linux gọi là command line) thì hãy gõ startx rồi Enter! Một màn hình quen thuộc phải không? Không như Windows hay Mac luôn khởi động thẳng vào môi trường desktop quen thuộc mà bạn sử dụng hàng ngày, Linux có 2 tùy chọn để làm việc: môi trường Terminal sử dụng command line (giống như DOS ở Windows) và môi trường desktop. Cả hai đều có mục đích sử dụng riêng mà mình sẽ trình bày sau. Còn bây giờ để không phải bỡ ngỡ thì mình làm việc với môi trường desktop trước.
Môi trường desktop của Raspberry Pi Chúc các bạn thành công! Ở bài sau mình sẽ hướng dẫn thực hành ứng dụng đầu tiên vớiRaspberry Pi: bật tắt LED.
Thực hành Raspberry Pi: bật tắt LED Chuẩn bị: Raspberry Pi 1 LED, 1 điện trở 1K và vài dây nối. Kết nối Raspberry Pi với LED: khi kết nối nhớ chú ý sơ đồ chân GPIO của Pi như sau
8
Sơ đồ chân GPIO của Raspberry Pi Các ngõ GPIO được đánh dấu màu xanh lá cây. Lưu ý là các ngõ này chỉ hoạt động ở mức logic 0V và 3V3. Tuyệt đối không kết nối với nguồn 5V. Để thực hiện mình sẽ viết một chương trình nhỏ bằng ngôn ngữ Python. Python cũng như C hay Java, là ngôn ngữ lập trình rất mạnh và hỗ trợ phong phú thư viện giúp cho việc lập trình hiệu trở nên đơn giản và hiệu quả. Python được cài đặt sẵn trên Raspberry Pi. Ở những bài viết đầu tiên mình sẽ cố gắng giới thiệu kĩ để các bạn beginners dễ hiểu. Sau này khi các bạn thành thạo mình sẽ cô đọng vào nội dung chính. Viết chương trình bật tắt LED bằng Python:
Bước 1: Để mở Python: từ màn hình desktop bạn double click vào icon IDLE3 hoặc chọn Start – Programming – IDLE 3. Một cửa sổ Python Shell hiện lên: đây sẽ là nơi hiển thị các kết quả tính toán của chương trình. Bước 2: Để bắt đầu viết code: từ Python Shell chọn File – New Window hoặc Ctrl+N. Một cửa sổ mới sẽ hiện lên và đây là nơi bạn viết chương trình. Bước 3: Viết code. Dưới đây là chương trình mẫu thực hiện chớp tắt 1 đèn LED tại chân số 22. Sau khi viết xong các bạn save vào /home/pi và đặt tên là blinkLED.py 1 # Blinking an LED 2 # By Chinh Nguyen 3 # import 4 import RPi.GPIO as GPIO RPi.GPIO library and use with new name 9
5 GPIO 6 import time # import time library 7 GPIO.setmode(GPIO.BCM) 8 GPIO.setup(22, GPIO.OUT) 9 while True: 10 GPIO.output(22, GPIO.HIGH) 11 time.sleep(1) 12 GPIO.output(22, GPIO.LOW) time.sleep(1)
Giải thích: Rất đơn giản đúng không? Chương trình trên sử dụng một vòng lặp While thực hiên các việc sau: cấp điện cho chân 22 (nối với đèn LED) làm đèn sáng, giữ trạng thái đó trong 1 giây, ngắt điện chân 22 làm đèn tắt, giữ trạng thái 1 giây. Rồi lặp lại. Để truy cập ngõ GPIO thì Python cần có thư viện RPi.GPIO. Thư viện này hỗ trợ các lệnh cần thiết để điều khiển các chân GPIO. Ngoài ra Python cần có thư viện time để thực hiện lệnh time.sleep(1): giữ nguyên tất cả trạng thái trong vòng 1 giây. Đó là lý do của 2 dòng lệnh đầu tiên. Dòng lệnh thứ 3 và thứ 4 có tác dụng thiết lập chân 22 thành ngõ điều khiển (output) để bật tắt LED. Trong ví dụ khác mình sẽ dùng chân 22 để theo dõi một nút nhấn, lúc đó ta phải thiết lập chân này thành ngõ vào (input). Qui ước khoảng trắng: tất cả 4 dòng lệnh nằm dưới vòng lặp While đều phải thụt vô 4 khoảng trắng (hoặc nhấn phím Tab 1 lần) so với chữ While. Khác với C, Python không dùng cặp dấu {…} mà lại dùng 4 khoảng trắng để đánh dấu chương trình con. Điều này làm chương trình nhìn thoáng hơn nhưng nếu không quen thì có thể dẫn đến lỗi. May mắn là chương trình IDLE sẽ tự động làm việc này nhưng nếu bạn chỉnh sửa gì đó thì hãy chú ý. Ký hiệu # là comment (chú thích). Bạn có thể đặt chú thích tùy ý để giải thích hay ghi chú cho chương trình. Thường xuyên comment là một thói quen rất cần thiết của người lập trình. Khi cần xem lại một chương trình mình đã viết, comment giúp gợi nhớ rất nhanh ý tưởng lập trình mà không cần đọc từng dòng code. Ngoài ra nó còn giúp người khác dễ hiểu hơn, dễ sửa lỗi hơn. Bước 4: Chương trình trên chưa thể chạy liền được vì thư viện RPi.GPIO chưa có sẵn trong Raspberry Pi mà ta phải download về. Mở LXTerminal hoặc chọn Start – Accessories – LXTerminal. LXTerminal tương tự như command line mà bạn từng thấy. Gõ vào như sau (phần viết đậm)
10
sudo apt-get update (rồi Enter) sudo apt-get install python-rpi.gpio (Enter) Cuối cùng: CHẠY! Ở LXTerminal, gõ: sudo python /home/pi/blinkLED.py rồi nín thở quan sát!
Chúc các bạn thành công! Mình sẽ rất vui nếu các bạn chia sẻ kết quả ở đây
Viết ứng dụng gửi email với Raspberry Pi Sau khi cài đặt hệ điều hành thì các bạn có thể viết rất nhiều ứng dụng từ dễ đến khó trên Raspberry Pi. Ở bài này mình sẽ hướng dẫn các bạn viết ứng dụng gửi email bằng ngôn ngữ Python. Các dịch vụ email phổ biến như Gmail, Yahoo! Mail đều cho phép người dùng truy cập và gửi email từ một ứng dụng khác. Ở đây ta sẽ tự tay viết ứng dụng đó bằng Python: 1 # Import smtplib for the actual sending function 2 import smtplib 3 4 # Import the email modules we will need 5 from email.mime.text import MIMEText 6 7 # Open a plain text file for reading. For this 8 example, assume that 9 # the text file contains only ASCII characters 10 fp = 11 open('/home/pi/My_python/Text_files/first_email.txt') 12 msg = MIMEText(fp.read()) 13 fp.close() 14 15 from_addr = "[email protected]" 16 pw = "sender-password" 17 to_addr = "[email protected]" 18 19 msg['Subject'] = 'Hello from Pi!' 20 msg['From'] = from_addr 21 msg['To'] = to_addr 22 23 # Send the message via our own SMTP server, but don't 24 include the 25 # envelope header 26 server = smtplib.SMTP('smtp.gmail.com', 587) 27 28 server.set_debuglevel(1) 29 server.ehlo() 11
30 server.starttls() 31 server.login(from_addr, pw) server.send_message(msg) server.quit() Giải thích: Để gửi Gmail thì Python cần phải đóng vai trò như một Gmail server và thực hiện gửi mail thông qua giao thức SMTP (Simple Mail Transfer Protocol). Để xác nhận tài khoản email ta phải khai báo gồm địa chỉ email, password, SMTP server (stmp.gmail.com) và cuối cùng là port (465 hoặc 587). Dòng 1: import thư viện SMTP. Dòng 25+26: khởi tạo server. Dòng 27: đặt kết nối SMTP vào TLS (Transport Layer Security) nhằm mã hóa dữ liệu, đảm bảo tính bảo mật Và đây là thành quả:
Email: Hello from Pi!
12
PS: nhân tiện nói luôn về phần nhận email từ phần mềm hoặc điện thoại di động: có 2 giao thức phổ biến là IMAP (Internet Message Access Protocol) và POP (Post Office Protocol). Điểm khác biệt là IMAP cho phép đồng bộ 2 chiều giữa Gmail trên web và phần mềm email, thí dụ như bạn tạo một folder ABC trên điện thoại thì nó sẽ lập tức xuất hiện trên web. Ngoài ra IMAP cũng hoạt động ổn định hơn POP và do đó được Gmail khuyên dùng. Muốn sử dụng IMAP thì bạn cũng phải khai báo username, password và một số thông số mặc định khác.
Thực hành: Dự báo thời tiết bằng Raspberry Pi Để thực hiện dự báo thời tiết bằng Raspberry Pi, bạn cần chuẩn bị phần cứng như sau: 1 Raspberry Pi kết nối Internet. Hết. Con người thường lên Internet tra cứu dự báo thời tiết và Pi cũng sẽ làm tương tự. Điều khác biệt là Pi không như con người có thể tự mở Internet Explorer lên và gõ www.weather.com rồi nhập tên thành phố và đọc kết quả trên màn hình. Các dịch vụ trên Internet trao đổi thông tin với phần mềm máy tính thông qua một hình thức khác là API (Application Programming Interface). API cho phép Pi gửi một yêu cầu (request) đến server và nhận kết quả (get response). Kết quả nhận được thường ở dưới một format nhất định, thường là JSON và XML. Pi sẽ đọc file này và dữ liệu cần tìm. Ưu điểm của API là giúp developer có thể tận dụng sức mạnh của các dịch vụ có sẵn. Bù lại, bạn phải có kết nối Internet. Bài viết này sẽ hướng dẫn ví dụ thao tác với API của Weather Underground. Các API khác bạn có thể làm tương tự. 1. Đăng kí: thông thường các trang web yêu cầu phải đăng kí trước khi sử dụng API. Đăng kí miễn phí http://www.wunderground.com/weather/api/d/login.html Sau khi đăng kí bạn sẽ nhận được một Key để thực hiện request. 2. JSON format: Như đã đề cập, đây là một format của dữ liệu được trả về Pi. Muốn lấy được dữ liệu cần thiết thì bạn phải đọc tài liệu hướng dẫn (documentation) được viết rõ trên website. Ví dụ như muốn xem dự báo thời tiết thì click vào feature forecast (http://www.wunderground.com/weather/api/d/docs?d=data/forecast) , kéo chuột xuống cuối trang xem ví dụ. Chẳng hạn như đây là đoạn đầu tiên một file .JSON nhận được khi request dự báo thời tiết ở California, San Francisco: { 1 "response": { 2 "version": "0.1", 3 "termsofService": 4 "http://www.wunderground.com/weather/api/d/terms.html", 5 "features": {
13
6
"forecast": 1
7
}
8
},
9
"forecast": {
10
"txt_forecast": {
11
"date": "2:00 PM PDT",
12
"forecastday": [{
13
"period": 0,
14
"icon": "partlycloudy",
15
"icon_url": "http://iconsak.wxug.com/i/c/k/partlycloudy.gif",
16 "title": "Tuesday", 17 "fcttext": "Partly cloudy in the morning, then clear. 18 High of 68F. Breezy. Winds from the West at 10 to 25 mph.", 19
"fcttext_metric": "Partly cloudy in the morning, then 20 clear. High of 20C. Windy. Winds from the West at 20 to 35 km/h.", 21 "pop": "0" 22 }, { 23 "period": 1, 24 "icon": "partlycloudy", 25 "icon_url": "http://icons26 ak.wxug.com/i/c/k/partlycloudy.gif", 27 28
"title": "Tuesday Night", "fcttext": "Mostly cloudy. Fog overnight. Low of 50F. Winds from the WSW at 5 to 15 mph.", "fcttext_metric": "Mostly cloudy. Fog overnight. Low of
14
10C. Breezy. Winds from the WSW at 10 to 20 km/h.", "pop": "0" } 3. Lập trình Python: Như vậy muốn lấy kết quả dự báo thời tiết bạn phải trích dữ liệu của fcttext_metric nằm trong phần forecast/txt_forecast/forecastday/ đầu tiên. Ví dụ với thành phố New York như sau: import requests 1 2 key = 'your-API-key'
#replace your API key here
3 ApiUrl = 'http://api.wunderground.com/api/' + key + '/forecast/q/NY/New_York.json' 4 5 6 7 8 9
r = requests.get(ApiUrl, timeout=1) forecast = r.json format
# since this api response in JSON
print r.status_code print r.headers
1 print 0 forecast['forecast']['txt_forecast']['forecastday'][0]['fcttex t_metric'] #extract data from JSON Lưu ý: Nhớ thay your-API-key bằng key của bạn. Đoạn code trên sử dụng thư viện (library) Request cho Python. Library Request cung cấp nhiều function hay và dễ sử dụng trên Python để giao tiếp với API. Bạn phải cài đặt Request trước khi chạy chương trình. Cách cài đặt rất đơn giản, trên LXTerminal gõ như sau: 1 sudo pip install requests Lưu chương trình với tên text-forecast.py trong thư mục My_python rồi chạy bằng cách mở LXTerminal gõ như sau: 15
1
sudo python /home/pi/My_python/textforecast.py
Sử dụng Webcam, truyền hình ảnh lên web với SimpleCV *Test webcam Nếu bạn đang chuẩn bị mua một chiếc webcam để sử dụng cho Raspberry Pi thì trước hết bạn nên tham khảo danh sách này, cộng đồng người dùng Pi thế giới đã test và đưa ra đánh giá về nhiều loại webcam cho bạn tham khảo. Webcam list Để test webcam bạn cài luvcview, đây là phần mềm hỗ trợ tốt nhất cho GPU của Raspberry Pi: pi@raspberrypi ~ $ sudo apt-get install luvcview Sau khi cài đặt xong: pi@raspberrypi ~ $ luvcview -s 320x240 Kích thước video 320×240 là do bạn tùy chỉnh, bạn có thể thay bằng 640×480 chẳng hạn. *Sử dụng SimpleCV Trước khi cài SimpleCV cho Python, cần cài một thư viện khác mà SimpleCV phụ thuộc vào: pi@raspberrypi ~ $ sudo apt-get install python-opencv python-scipy python-numpy python-pip Việc cài đặt trên sẽ mất một chút thời gian bởi đó là thư viện khá lớn. Tiếp theo là cài đặt SimpleCV với lệnh sau: pi@raspberrypi ~ $ sudo pip install https://github.com/ingenuitas/SimpleCV/zipball/master Kiểm tra kết quả bằng cách import SimpleCV, nếu không có lỗi có nghĩa là việc cài đặt đã thành công: pi@raspberrypi ~ $ python >>> import SimpleCV Các ứng dụng với SimpleCV bạn có thể tham khảo trong tài liệu Practical Computer Vision with SimpleCV của Kurt Demaagd. Sau đây mình chỉ xây dựng 1 ứng dụng thiết thực nhưng ít được đề cập trong các tài liệu đó là “Truyền hình ảnh thu được từ video lên web”: 1 # import các module cần dùng 2 from SimpleCV import Camera, JpegStreamer, Image 3 import time 4 from time import sleep 5 16
6 c = Camera(0, {"width": 320, "height": 240}) # Thiết 7 lập khung hình camera 8 js = JpegStreamer("192.168.0.103:8080") # Địa chỉ IP 9 của Rasberry của bạn có thể khác, port 8080 do bạn tùy 10 chọn 11 while(True): # Vòng lặp truyền 10 hình/s img = c.getImage() img.save(js) sleep(0.1) Sau khi chạy chương trình, bạn dùng một máy tính khác trong mạng và truy cập vào địa chỉ 192.168.0.103:8080. Chúc các bạn thành công! Gõ tiếng Việt trên Raspberry Pi Từ khi viết về Raspberry Pi mình bắt đầu có nhu cầu gõ tiếng Việt trên Pi để trực tiếp soạn thảo nội dung lẫn cắt dán code và hình ảnh minh họa. Do đó tìm kiếm một bộ gõ tiếng Việt là nhu cầu hết sức bức xúc trong những ngày qua Trên Linux thì IBus (Intelligent Input Bus for Linux/Unix OS) là bộ gõ chính thức được cài sẵn trên các phiên bản hệ điều hành gần đây. Để gõ tiếng Việt trên IBus thì bạn cần cài đặt thêm gói IBus-unikey. Trên Raspberry Pi không được cài đặt sẵn IBus lẫn IBusunikey nhưng thao tác thực hiện rất đơn giản. Cách cài đặt bộ gõ tiếng Việt IBus-unikey: 1 sudo apt-get update 2 sudo apt-get install ibus-unikey Bạn có thể thấy ta chỉ cần cài ibus-unikey vì hệ thống sẽ tự động kiểm tra và cài đặt những phần mềm cần thiết khác để ibus-unikey hoạt động (trong trường hợp này là ibus). Sau khi cài đặt xong bạn sẽ thấy biểu tượng IBus ở góc dưới bên phải màn hình. Chọn Preference:
17
IBus-unikey trên Raspberry Pi Ở tab General nhớ chú ý tick vào ô Embed pre-edit text in application window. Nếu không thì khi gõ tiếng Việt sẽ hiện ra thêm 1 cửa sổ nhỏ rất khó chịu. Ở tab Input Method: click Select an input method chọn Vietnamese-Unikey rồi Add vào. Ở tab Advanced nhớ tick vào cả 2 options.
Một số lưu ý: Để chuyển đổi qua lại giữa gõ tiếng Việt và tiếng Anh: nhấn Ctrl-Space. Bộ gõ sẽ mặc định sử dụng kiểu gõ Telex và bảng mã Unicode. Bạn có thể thay đổi trong menu của IBus-Unikey. Các options còn lại các bạn tự khám phá nhe! Chúc các bạn gõ tiếng Việt thành thạo trên Raspberry Pi
Thiết lập USB Wifi cho Raspberry Pi Một số bạn sử dụng usb wifi cắm vào Raspberry lập tức bị reset, đó là do usb wifi rút dòng lớn quá mà port usb của Ras Pi thì cấp không đủ thế nên bạn phải dùng thêm hub usb có nguồn riêng. Tuy nhiên vẫn có một số usb cắm trực tiếp vào Pi thì ok, không sao hết, do nó sử dụng loại chip rút dòng ít. Nếu bạn chuẩn bị mua thì có thể tham khảo 18
trong danh sách này: USB Wifi list Bước 1: Truy cập vào file interfaces: sudo nano /etc/network/interfaces Bước 2: Sửa file interfaces trở thành như sau: auto lo iface lo inet loopback iface eth0 inet dhcp allow-hotplug wlan0 auto wlan0 iface wlan0 inet dhcp wpa-ssid “tên wifi” wpa-psk “password” Bước 3: Nếu wifi bạn là wifi ẩn: auto lo iface lo inet loopback iface eth0 inet dhcp auto wlan0 allow-hotplug wlan0 iface wlan0 inet dhcp wpa-scan-ssid 1 wpa-ap-scan 1 wpa-key-mgmt WPA-PSK wpa-proto RSN WPA wpa-pairwise CCMP TKIP wpa-group CCMP TKIP wpa-ssid “tên wifi” wpa-psk “password” iface default inet dhcp Bước 4: Thế là xong phần thiết lập cho usb wifi, nhưng mà chưa xong đâu bạn ^^, có những loại usb wifi nó lại có chế độ saving power, thành ra nhiều bạn đang truy cập vào Pi bằng putty thông qua wifi thì bị mất kết nối do usb wifi nó “sleep”, vậy nên bạn làm thêm mấy bước sau cho chắc ăn nhé: 4a. Tạo file dùng lệnh như sau: sudo nano /etc/modprobe.d/8192cu.conf 4b. Điền dòng sau vào file vừa tạo và save lại: options 8192cu rtw_power_mgnt=0 rtw_enusbss=0 4c. Truy cập vào crontab: sudo crontab -e 19
4d. Điền dòng sau vào và save lại,thay 192.168.0.1 bằng IP của Router của bạn: */1 * * * * ping -c 1 192.168.0.1 Bước 5 Xong xuôi, reboot và cắm usb wifi vào
Điều khiển Raspberry Pi từ xa bằng máy tính Trong nhiều ứng dụng có không gian hạn chế chẳng hạn như dùng Raspberry Pi để điều khiển cửa tự động thì người ta thường không muốn kết nối rườm rà màn hình, bàn phím, chuột lên Pi mà vẫn có thể khiển được nó. Khi đó ta có thể sử dụng 2 công nghệ phổ biến để điều khiển Raspberry Pi từ xa bằng một máy tính khác là SSH và VNC. Mỗi công nghệ có đặc điểm riêng phù hợp với từng ứng dụng mà mình sẽ trình bày sau đây. Yêu cầu chung: phải biết địa chỉ IP của thiết bị được điều khiển. Trong trường hợp này ta cần biết địa chỉ IP của Pi bằng cách gõ từ LXTerminal ta gõ command line sau: 1 sudo ifconfig
ifconfig screenshot
Ở phần eth0, inet addr chính là địa chỉ IP. Trong hình minh họa trên, địa chỉ IP chính là 192.168.1.9. Mình sẽ sử dụng địa chỉ này làm ví dụ trong bài viết nhưng nhớ là địa chỉ IP của bạn có thể khác. Lưu ý: đây là địa chỉ IP động nên có thể thay đổi sau mỗi lần restart Pi.
1. Điều khiển Raspberry Pi bằng SSH: SSH là viết tắt của Secure Shell, là một phương thức trao đổi dữ liệu an toàn và đơn giản. Để sử dụng SSH ta phải cài đặt trên cả Pi lẫn máy tính.
20
1.1 Cài đặt SSH server trên Raspberry Pi Điều duy nhất bạn cần làm là activate SSH server ở menu Rasp-config bằng cách gõ ở LXTerminal: 1 sudo raspi-config
Lúc này màn hình Raspi-config sẽ hiện ra cho phép tùy chỉnh nhiều thông số hệ thống của Pi. Chọn mục Advance Options – SSH – Enable rồi OK.
Giao diện raspi-config
1.2 Cài đặt SSH client trên máy tính Windows: Download phần mềm PuTTY tại đây và chạy không cần cài đặt. Trên giao diện của PuTTY bạn chỉ cần nhập địa chỉ IP của Pi vào rồi click Open. Pi sẽ yêu cầu xác nhận username và password của Pi (mặc định là pi và raspberry). Nếu thành công thì máy tính sẽ xác nhận và hiển thị màn hình command line của Pi. Lúc này bạn có thể điều khiển Pi bằng command line thoải mái:
21
Giao diện PuTTY trên máy tính
22
Màn hình điều khiển Raspberry Pi bằng SSH
Như bạn đã thấy, ấy, điều khiển Pi bằng SSH khá đơn đ giản. SSH sử dụng rất ít tài ài nguyên máy ccủa Pi do không phải chạy phần đồ họa vì vậy ậy thích hợp cho các ứng dụng cần nhiều tài ài nguyên tính toán.Tuy nhiên nhược điểm của SSH là chỉỉ cho phép bạn truy cập vào v môi trường ờng command line. Trong tr trường hợp ợp cần điều khiển desktop của Pi thì th VNC (Virtual Network Computing) là một ột giải pháp tốt.
2. Điều khiển Raspberry Pi bằ ằng VNC: VNC là công nghệ ệ cho phép máy tính truy cập vào v môi trường desktop lẫn bàn àn phím và chu chuột của một máy tính khác. Để sử dụng VNC thìì ta cần c cài đặt VNC server lên máy tính được ợc điều khiển, vvà VNC client lên máy tính điều ều khiển. Trong trường tr hợp này ta muốn điều khiển Pi từ xa thìì ta cài VNC server lên Pi.
2.1 Cài đặtt VNC server trên Raspberry Pi: Có nhiều ều phần mềm có chức năng làm l VNC server trong đó tốt nhất là sử ử dụng TightVNCserver. Cách thức cài đặt và mở ở TightVNCserver trên tr LXTerminal như sau: 1 sudo apt-get install tightvncserver 2 tightvncserver
23
Khi chạy VNC lần đầu thì nó sẽ yêu êu cầu c bạn tạo một password truy cập. Đây cũng là à password mà b bạn sẽ được hỏi khi muốn truy cập vào ào Pi nhằm nh tránh tình trạng truy cập trái phép. Ngoài ài ra TightVNC còn cho phép bạn ạn đặt password dạng view-only view tức là chỉ cho phép bạn thấy màn hình nhưng ưng không đi điều khiển được bàn phím hay chuột, ột, rất hữu dụng trong trường tr hợp muốn chia sẻ màn àn hình khi thuy thuyết trình chẳng hạn. Sau khi đặt password thìì TightVNC sẽ s tạo một màn hình ảo của Pi để máy tính khác truy cập vvào. Muốn truy cập màn hình này bạn ạn cần có password xác nhận ở trên, tr địa chỉ IP của Pi và cổng ổng truy cập (port). Port mặc định của VNC là à 5900. Như vậy v muốn truy cập vào màn hình số 1 thì bạn dùng ùng đ địa chỉ: 192.168.1.9::5901. Tương tự ự nếu có một máy tính khác muốn truy cập màn m hình số ố 2 th thì sẽ dùng địa chỉ 192.168.1.9::5902. Lưu ý là màn hình số s 1 hay số 2 chỉ là màn hình ảo và độc ộc lập với nhau, ai cũng điều khiển được nhưng không ai thấy ấy người ng khác đang làm gì.
2.2 Cài đặtt VNC client trên Windows: Link download TightVNC tại đây. Sau khi cài đặt đ ta mở VNC client lên bằng ằng cách click Start – TightVNC – TightVNC Viewer, rồi nhập địa chỉ truy ruy cập, c click Connect và điền password truy cập.
Giao diện di TightVNC Viewer trên máy tính
24
Màn hình điều khiển Pi từ máy tính
Ngoài ra phần mềm TightVNC này ày còn tích hợp h cả VNC server lẫn client nên có thể ể sử dụng trong trường hợp ngược lại: dùng Pi để điều đi khiển máy tính.
Các link tham khảo Tạp chí PI : http://www.themagpi.com/ Diễn đàn PI: http://www.raspberrypi.org/forums/ website chính thức : http://www.raspberrypi.org/
25