Computer >> Hướng Dẫn Máy Tính >  >> Phần Mềm >> Thư Điện Tử

Tự Làm Đèn Thông Báo Gmail Với Raspberry Pi

Trong dự án Raspberry Pi nhanh chóng và dễ dàng này, bạn sẽ học cách làm đèn thông báo email Gmail. Nếu bạn có email chưa đọc, một kịch bản Python sẽ bật đèn LED. Dự án này yêu cầu rất ít bộ phận, và có thể hoàn thành trong chưa đầy một giờ! Bạn當然 có thể trang trí đèn LED bất kỳ cách nào bạn thích, như khối redstone MineCraft, hoặc vật thể khác in 3D bằng nhựa trong suốt. Đây là kết quả:

Những Gì Bạn Cần

  • 1 x Raspberry Pi
  • 1 x breadboard
  • 1 x điện trở 220 ohm
  • 1 x LED 5mm
  • 1 x tài khoản Gmail
  • Dây cắm đực-đực

Bất kỳ Raspberry Pi nào cũng hoạt động cho dự án này — thậm chí Pi Zero! Chỉ cần một chân GPIO, và nó không tốn nhiều CPU. Nếu bạn có kit khởi động Pi, bạn có nhiều hơn đủ bộ phận để hoàn thành.

Kế Hoạch Xây Dựng

Đây là một dự án thực sự đơn giản. Một diode phát sáng (LED) được kết nối với chân GPIO (General Purpose Input Output) trên Pi. Một kịch bản Python rất đơn giản sẽ chạy định kỳ để kiểm tra email chưa đọc và bật/tắt LED cho phù hợp.

Phần Cứng

Kết nối anode dương (chân dài) của LED với điện trở rồi đến chân GPIO 14. Bạn có thể dùng bất kỳ chân GPIO nào, tuy nhiên hãy xem sơ đồ chân trước, vì chúng khác nhau một chút giữa các mẫu. Kết nối cathode âm (chân ngắn với cạnh phẳng) xuống ground.

Cài Đặt Pi

Cung cấp Pi đã cài hệ điều hành (OS) thì không cần nhiều thiết lập (chưa biết cần gì? Học cách cài ở đây). Mở terminal mới (Góc trên trái > menu > Phụ kiện > Terminal) trên Pi (xem các phím tắt để làm ninja lập trình). Bạn cần tạo thư mục mới để lưu kịch bản Python. Nhập lệnh sau:

pwd

Đây là viết tắt của "Print Working Directory", sẽ hiển thị thư mục bạn đang ở (mặc định là "/home/pi"). Di chuyển vào thư mục Documents và tạo thư mục mới tên "gmail_python":

cd Documents/
sudo mkdir gmail_python

Lệnh "mkdir" là viết tắt của "Make Directory". Bất cứ thứ gì theo sau sẽ được dùng làm tên thư mục. Bây giờ bạn nên thấy thư mục của mình:

ls

Nếu lỡ làm sai, bạn có thể dễ dàng xóa thư mục này:

sudo rm -r gmail_python

Bây giờ di chuyển vào thư mục mới:

cd gmail_python/

Tạo kịch bản Python mới:

sudo nano check_messages.py

Lệnh này sẽ tạo kịch bản và mở nó sẵn sàng chỉnh sửa trong Nano. Bạn có thể dùng chương trình khác, như Vim, mặc dù tweet này tóm gọn cảm xúc của tôi về nó:

Bỏ qua phần đùa, xem so sánh giữa hai cho phân tích đầy đủ.

Nhấn CTRL + X để thoát Nano và quay lại terminal.

Cài Đặt Python

Pi đã sẵn sàng, đến lúc viết mã. Dự án này cần thư viện Gmail Python tuyệt vời của Charlie Guo. Tải thư viện từ Github và giải nén. Bên trong sẽ có thư mục tên "gmail". Sao chép toàn bộ thư mục này vào "/home/pi/Documents/gmail_python".

Quay lại dòng lệnh và mở kịch bản lại (nhấn phím mũi tên lên để lướt qua các lệnh trước):

sudo nano check_messages.py

Lưu ý lệnh này giống hệt lệnh tạo file — nếu file đã tồn tại sẽ mở, ngược lại sẽ tạo mới. Đây là mã Python:

import gmail, RPi.GPIO as GPIO, time # import modules
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use
GPIO.setup(14, GPIO.OUT) # tell the Pi this pin is an output
g = gmail.login('YOUREMAIL@gmail.com', 'YOUR PASSWORD')
unread_messages = g.inbox().mail(unread=True)
total_messages = 0
for message in unread_messages:
total_messages += 1
if total_messages > 0:
# there are unread emails, turn light on
GPIO.output(14, True)
else:
# there are no unread emails, turn light off
GPIO.output(14, False)

Bạn cần nhập tên người dùng và mật khẩu để hoạt động. Bạn có thể xem mã nguồn đầy đủ của plugin gmail nếu muốn. Nếu bạn không thoải mái làm vậy (hoặc bạn dùng xác thực hai yếu tố) bạn sẽ cần kết nối Gmail dùng OAuth2. Điều này hơi phức tạp cho hướng dẫn này, tuy nhiên Google có hướng dẫn bắt đầu tuyệt vời.

Phân tích mã. Trước hết một số module được nhập. Module trong Python là các mảnh mã nhỏ viết cho mục đích (tương tự thư viện trong Arduino IDE). RPi.GPIO là module riêng Pi để truy cập GPIO, gmail là module bạn tải trước, và time là module tích hợp trong Python cung cấp hàm thời gian. "GPIO.setmode" và "GPIO.setup" dùng để báo Pi chân 14 là output, và bạn muốn dùng "Broadcom Pin Numbering" (xem thêm về BCM).

Dòng này kết nối tài khoản gmail. Tạo đối tượng "g", gọi phương thức login của module gmail đã nhập trước. Đừng quên nhập email và mật khẩu gmail.

g = gmail.login('YOUREMAIL@gmail.com', 'YOUR PASSWORD')

Bây giờ lấy tất cả tin nhắn chưa đọc và lưu vào biến "unread_messages":

unread_messages = g.inbox().mail(unread=True)

Chú ý "unread=True" được truyền như tham số — bạn có thể thay đổi để lấy tin nhắn dựa trên tham số khác, như người gửi hoặc chủ đề. Xem tài liệu API để biết thêm.

Tiếp theo, vòng lặp for dùng để lặp qua mỗi tin nhắn:

for message in unread_messages:
total_messages += 1

Vòng lặp for rất hữu ích. Chúng lặp lại khối mã vài lần, thường với giá trị hơi khác mỗi lần. Vòng lặp này đi qua mỗi tin nhắn trong unread_messages và tăng biến "total_messages".

Cuối cùng, một số câu lệnh "if" đơn giản. Nếu có thư chưa đọc, bật LED, ngược lại tắt.

Nhớ rằng Python phân biệt chữ hoa/thường, và dùng khoảng trắng. Nếu gặp sự cố chạy mã, thử trang web này. Dán Python của bạn vào và nhấn nút "validate above python code". Nó sẽ báo lỗi (nếu có) trong Python của bạn.

Chuyển sang Terminal và chạy kịch bản:

python check_messages.py

Lệnh này chạy kịch bản. Thử thủ công đổi một vài email trong hộp thư thành chưa đọc và chạy lại kịch bản — bạn sẽ thấy LED bật/tắt phản ánh hộp thư.

Cài Đặt Cron

Kịch bản hoạt động, đến lúc tự động hóa. Cách dễ nhất là qua cron job. Cron job dùng để lên lịch tác vụ và kịch bản, như sao lưu tự động. Mở Crontab (danh sách tác vụ đã lên lịch):

crontab -e

Nếu chưa có tác vụ đã lên lịch, file sẽ trống (có thể chứa tài liệu hoặc chú thích, bắt đầu bằng "#"). Nếu đã có mục, chỉ cần nhập lệnh mới trên dòng mới:

* * * * * python ~/pi/Documents/gmail_python/check_messages.py

Năm "sao" ("* * * * *") chỉ định tần suất chạy tác vụ (có thể rất phức tạp, ví dụ mỗi thứ Tư thứ hai lúc 2.00). Năm sao này chỉ định tác vụ chạy mỗi phút. Đây là khoảng thời gian nhỏ nhất cho phép (tìm hiểu thêm về lịch cronjob). Tiếp theo, "python" báo scheduler chạy kịch bản như file python. Cuối cùng, "~/pi/Documents/gmail_python/check_messages.py" là đường dẫn tuyệt đối đến kịch bản — đường dẫn tương đối sẽ không hoạt động.

Bây giờ bạn đã có đèn thông báo Gmail riêng! Việc sửa đổi để tìm tin nhắn dựa trên yêu cầu/bộ lọc khác, hoặc thực thi mã khác khá đơn giản — có thể tạo bot Twitter tweet dựa trên email (tìm hiểu thêm về xây dựng bot Twitter Pi).

Dù bạn code hộp thông báo như thế nào, tôi rất muốn biết kết quả trong bình luận!