Python có thể được sử dụng cho các dự án IoT không?

trở thành một vấn đề đối với các dự án phức tạp hơn, nơi chúng tôi cần duy trì các cơ sở mã và phần phụ thuộc riêng biệt để đảm bảo các dự án của chúng tôi không can thiệp lẫn nhau hoặc tệ hơn như chúng ta sẽ thảo luận, phá vỡ các công cụ và tiện ích của hệ điều hành

Vì vậy, trước khi chúng ta chuyển sang mã IoT và các ví dụ trong các chương sau, điều rất quan trọng đối với chúng ta là phải đề cập đến các bước cần thiết để thiết lập một dự án Python và môi trường thời gian chạy của nó

Trong chương này, chúng ta sẽ đề cập đến các chủ đề sau

  • Hiểu cài đặt Python của bạn
  • Thiết lập môi trường ảo Python
  • Cài đặt các gói Python GPIO bằng pip
  • Các phương pháp thay thế để thực thi tập lệnh Python
  • Cấu hình giao diện Raspberry Pi GPIO
 

Yêu cầu kỹ thuật

Để thực hiện các bài tập tay-0n trong chương này, bạn sẽ cần những thứ sau

  • Raspberry Pi 4 Mẫu B
  • Raspbian OS Buster (với máy tính để bàn và phần mềm được đề xuất)
  • Phiên bản Python tối thiểu 3. 5

Những yêu cầu này là những ví dụ mã trong cuốn sách này được dựa trên. Thật hợp lý khi hy vọng rằng các ví dụ về mã sẽ hoạt động mà không cần sửa đổi trên Raspberry Pi 3 Model B hoặc một phiên bản khác của Hệ điều hành Raspbian, miễn là phiên bản Python của bạn là 3. 5 hoặc cao hơn

Mã nguồn đầy đủ của cuốn sách này có thể được tìm thấy trên GitHub tại URL sau. https. //github. com/PacktPublishing/Practical-Python-Programming-for-IoT. Chúng tôi sẽ sao chép kho lưu trữ này ngay khi đến phần Thiết lập môi trường ảo Python

 

Hiểu cài đặt Python của bạn

Trong phần này, chúng ta sẽ tìm hiểu xem bạn đã cài đặt phiên bản Python nào trên Raspberry Pi. Như chúng ta sẽ khám phá, có hai phiên bản Python được cài đặt sẵn trên hệ điều hành Raspbian. Các hệ điều hành dựa trên Unix (chẳng hạn như Raspbian OS) thường được cài đặt sẵn Python phiên bản 2 và 3 vì có các tiện ích cấp hệ điều hành được xây dựng bằng Python.

Để biết phiên bản Python nào bạn có trên Raspberry Pi, hãy làm theo các bước sau

  1. Mở Terminal mới và thực thi lệnh python --version  command .

$ python --version
Python 2.7.16

Trong ví dụ của tôi, chúng ta thấy rằng Python phiên bản 2. 7. 16 đã được cài đặt

  1. Tiếp theo, hãy chạy lệnh python3 --version  command .

$ python3 --version
Python 3.7.3

Trong ví dụ của tôi, chúng tôi thấy rằng phiên bản thứ hai của Python (nghĩa là python3, với phiên bản 3) được cài đặt là phiên bản   . 7. 3.

Đừng lo lắng nếu các phiên bản phụ (số. 7. 16 sau 2 và. 7. 3 sau 3) không giống nhau; . Python 2 là phiên bản kế thừa của Python, trong khi Python 3 là phiên bản Python hiện tại và được hỗ trợ tại thời điểm viết bài. Khi chúng tôi bắt đầu phát triển Python mới, thực tế chúng tôi sẽ luôn sử dụng Python 3 trừ khi có các vấn đề cũ mà chúng tôi cần phải giải quyết

Python 2 chính thức hết hạn sử dụng vào tháng 1 năm 2020. Nó không còn được duy trì và sẽ không nhận được bất kỳ cải tiến, sửa lỗi hoặc bản vá bảo mật nào nữa

Nếu là một lập trình viên Python có kinh nghiệm, bạn có thể phân biệt được một tập lệnh được viết cho Python 2 hay 3, nhưng  điều này không phải lúc nào cũng rõ ràng by simply looking at a piece of code. Many new-to-Python developers experience frustrations by mixing up Python programs and code fragments that are meant for different Python versions. Always remember that mã được viết cho Python 2 không đảm bảo có thể so sánh được với Python 3 mà không cần sửa đổi.

Một mẹo nhanh mà tôi có thể chia sẻ để giúp xác định một đoạn mã được viết cho phiên bản Python nào (nếu lập trình viên không nói rõ trong phần nhận xét mã) là tìm kiếm một câu lệnh in

Nếu bạn nhìn vào ví dụ sau, bạn sẽ thấy rằng có hai câu lệnh in. Câu lệnh in đầu tiên không có dấu ngoặc đơn là một sự cho đi rằng nó sẽ chỉ hoạt động với Python 2

print "Hello"  # No parentheses - This only works in Python 2, a dead give-away that this script is for Python 2.

print("Hello") # With parentheses - this will work in Python 2 and Python 3

Tất nhiên, bạn luôn có thể chạy mã với cả Python 2 và 3 và xem điều gì sẽ xảy ra

Hiện tại, chúng tôi  đã biết rằng có hai phiên bản Python có sẵn theo mặc định trên Hệ điều hành Raspbian và đã đề cập rằng có các tiện ích cấp hệ thống được viết bằng Python đáp ứng các phiên bản này . Là nhà phát triển Python, chúng ta phải cẩn thận để không làm gián đoạn quá trình cài đặt Python toàn cầu vì điều này có khả năng phá vỡ các tiện ích cấp hệ thống.

Bây giờ chúng ta sẽ chuyển sự chú ý của mình sang một khái niệm Python rất quan trọng, môi trường ảo Python, đó là cách chúng ta cô lập hoặc sandbox các dự án Python của riêng mình khỏi quá trình cài đặt chung

 

Thiết lập môi trường ảo Python

Trong phần này, chúng ta sẽ thảo luận về cách Python tương tác với cài đặt hệ điều hành của bạn và bao gồm các bước cần thiết để thiết lập và định cấu hình môi trường phát triển Python. Ngoài ra, như một phần của quy trình thiết lập, chúng tôi sẽ sao chép kho lưu trữ GitHub chứa tất cả mã (sắp xếp theo chương) cho cuốn sách này

Theo mặc định, Python và công cụ quản lý gói của nó, pip , hoạt động trên toàn cầu ở cấp hệ thống và có thể gây nhầm lẫn cho người mới bắt đầu sử dụng Python vì . Làm việc không mệt mỏi và thực hiện các thay đổi đối với môi trường Python toàn cầu có thể phá vỡ các công cụ cấp hệ thống dựa trên Python và việc khắc phục tình trạng này có thể trở thành một vấn đề đau đầu.

Là nhà phát triển Python, chúng tôi sử dụng Python môi trường ảo to sandbox our Python projects so they will not adversely interfere with system-level Python utilities or other Python projects.

Trong cuốn sách này, chúng ta sẽ sử dụng một công cụ môi trường ảo có tên là venv, c omes được đóng gói dưới dạng một mô-đun tích hợp sẵn với Python 3. 3 trở lên. Có nhiều công cụ môi trường ảo khác xung quanh, tất cả đều có điểm mạnh và điểm yếu tương đối, nhưng tất cả đều có chung mục tiêu là giữ cho các phần phụ thuộc của Python được tách biệt với một dự án.

virtualenv và pipenv là hai tùy chọn công cụ môi trường ảo thay thế cung cấp nhiều tính năng hơn venv. Những lựa chọn thay thế này rất phù hợp cho các dự án và triển khai Python phức tạp. Bạn sẽ tìm thấy các liên kết đến những điều này trong phần Đọc thêm ở cuối chương này.

Hãy bắt đầu sao chép kho lưu trữ GitHub và tạo một môi trường ảo Python mới cho mã nguồn của chương này. Mở một cửa sổ Terminal mới và thực hiện theo các bước sau

  1. Thay đổi hoặc tạo một thư mục mà bạn muốn lưu trữ mã nguồn của cuốn sách này và thực hiện các lệnh sau. Với lệnh cuối cùng, chúng tôi đổi tên thư mục nhân bản thành pyiot. Điều này đã được thực hiện để giúp rút ngắn các ví dụ về lệnh Terminal xuyên suốt cuốn sách
$ cd ~
$ git clone https://github.com/PacktPublishing/Practical-Python-Programming-for-IoT
$ mv Practical-Python-Programming-for-IoT pyiot

  1. Tiếp theo, chuyển sang thư mục chương01 chứa mã liên quan đến chương này

$ cd ~/pyiot/chapter01
  1. Thực thi lệnh sau để tạo môi trường ảo Python mới bằng công cụ venv. Điều quan trọng là bạn phải nhập python3 (với số 3) và hãy nhớ rằng venv chỉ khả dụng với Python 3. 3 trở lên.
$ python3 -m venv venv

Các tùy chọn mà chúng tôi đang chuyển sang python3 bao gồm -m venv, tùy chọn này  cho trình thông dịch Python biết rằng chúng tôi muốn chạy mô-đun có tên venv . Tham số venv  tên thư mục chứa môi trường ảo của bạn .

Mặc dù thoạt nhìn có thể khó hiểu trong lệnh trước, nhưng theo quy ước chung để đặt tên cho thư mục của môi trường ảo venv. Ở phần sau của chương này, trong phần Cấu tạo của môi trường ảo, chúng ta sẽ khám phá những gì nằm bên dưới thư mục venv mà chúng ta vừa tạo.

  1. Để sử dụng môi trường ảo Python, chúng ta phải kích hoạt nó, điều này được thực hiện bằng lệnh kích hoạt
# From with in the folder ~/pyiot/chapter01
$ source venv/bin/activate
(venv) $

Khi Terminal của bạn đã kích hoạt môi trường ảo Python, tất cả hoạt động liên quan đến Python sẽ được sandbox vào môi trường ảo của bạn

Thông báo  trong mã trước đó, sau khi kích hoạt, tên của môi trường ảo,  venv . Trong cuốn sách này, bất cứ khi nào bạn thấy các ví dụ về Terminal trong đó dấu nhắc là (venv) $, đó là lời nhắc rằng các lệnh cần được thực thi từ bên trong môi trường ảo Python đã kích hoạt.

  1. Tiếp theo, hãy thực thi which python (không có 3) trong Terminal của bạn và lưu ý rằng vị trí của tệp thực thi Python nằm bên dưới thư mục venv của bạn và nếu bạn kiểm tra phiên bản Python thì đó là Python phiên bản 3
(venv) $ which python
/home/pi/pyiot/chapter01/venv/bin/python

(venv) $ python --version
Python 3.7.3
  1. Để rời khỏi môi trường ảo đã kích hoạt, hãy sử dụng lệnh hủy kích hoạt như được minh họa tại đây
________số 8

Cũng xin lưu ý rằng  (venv) $  không còn là một phần của văn bản lời nhắc Terminal sau khi môi trường ảo đã bị hủy kích hoạt.

Hãy nhớ  nhập   hủy kích hoạt để rời khỏi môi trường ảo . Nếu bạn nhập  exit. If you type  exit   trong môi trường ảo, thao tác này sẽ thoát khỏi Terminal.

  1. Cuối cùng, bây giờ bạn đã ở bên ngoài môi trường ảo Python của chúng tôi nếu bạn thực thi which python (không có 3) và python --version một lần nữa, hãy lưu ý rằng chúng ta đang quay lại trình thông dịch Python cấp hệ thống mặc định, đó là phiên bản 2
$ which python
/usr/bin/python

$ python --version
Python 2.7.13

Như chúng tôi vừa minh họa trong các ví dụ trước, khi chạy python --version trong môi trường ảo được kích hoạt, chúng tôi thấy rằng đó là Python phiên bản 3 trong khi ở ví dụ trước, ở đầu chương này, cấp độ hệ thống, python --version . Trên thực tế, python (không có số) liên quan đến phiên bản mặc định của Python. Trên toàn cầu, đây là phiên bản 2. Trong môi trường ảo của bạn, chúng tôi chỉ có một phiên bản Python, đó là phiên bản 3, vì vậy nó trở thành mặc định

Một môi trường ảo được tạo bằng venv kế thừa (thông qua một liên kết tượng trưng) phiên bản trình thông dịch Python toàn cầu mà nó được gọi bằng (trong trường hợp của chúng tôi là phiên bản 3 vì lệnh đó . . . . . . . . . . python3 -m venv venv).  Nếu bạn cần nhắm mục tiêu một phiên bản Python cụ thể khác với phiên bản toàn cầu, hãy tìm hiểu các lựa chọn thay thế môi trường ảo virtualenv và pipenv.

Bây giờ chúng ta đã biết cách tạo, kích hoạt và hủy kích hoạt môi trường ảo Python và lý do tại sao việc sử dụng môi trường ảo cho các dự án sandbox Python lại quan trọng. Hộp cát này có nghĩa là chúng tôi có thể tách biệt các dự án Python của riêng mình và các phần phụ thuộc thư viện của chúng với nhau và nó ngăn chúng tôi có khả năng làm gián đoạn quá trình cài đặt Python ở cấp hệ thống và phá vỡ bất kỳ công cụ và tiện ích cấp hệ thống nào dựa trên chúng

Tiếp theo, chúng ta sẽ xem cách cài đặt và quản lý các gói Python trong môi trường ảo bằng cách sử dụng pip

 

Cài đặt các gói Python GPIO bằng pip

Trong phần này, chúng ta tìm hiểu cách cài đặt và quản lý các gói Python trong môi trường ảo Python mà bạn đã tạo và khám phá trong phần trước. Gói Python  (hoặc thư viện nếu bạn thích thuật ngữ đó hơn) cho phép chúng tôi mở rộng ngôn ngữ Python cốt lõi bằng các tính năng và chức năng mới.

Chúng ta sẽ cần cài đặt nhiều gói khác nhau trong suốt cuốn sách này, tuy nhiên, để bắt đầu và khám phá cũng như tìm hiểu các khái niệm cơ bản liên quan đến cài đặt và quản lý gói, chúng ta sẽ cài đặt hai gói phổ biến liên quan đến GPIO trong phần này mà chúng ta sẽ sử dụng trong suốt phần này . Hai gói này như sau

  • Thư viện GPIOZero, thư viện GPIO cấp đầu vào và dễ sử dụng để điều khiển các thiết bị điện tử đơn giản
  • Thư viện PiGPIO, thư viện GPIO nâng cao với nhiều tính năng dành cho giao tiếp điện tử phức tạp hơn

Trong hệ sinh thái Python, việc quản lý gói được thực hiện bằng lệnh pip (pip là viết tắt của gói cài đặt Python). Kho lưu trữ gói công khai chính thức mà pip truy vấn được gọi là Chỉ mục gói Python hoặc đơn giản là PyPi và có sẵn để duyệt trên web tại https. //pypi. tổ chức

Tương tự như python và python3, có pip và pip3. pip (không có số) sẽ là lệnh pip mặc định khớp với lệnh python mặc định trong một môi trường ảo nhất định

Sẽ có các mã ví dụ trong cuốn sách này, nơi chúng ta sẽ tương tác với các chân GPIO của Raspberry Pi, vì vậy chúng ta cần cài đặt một (hoặc hai) gói Python để mã Python của bạn có thể hoạt động với các chân GPIO của Raspberry Pi. Hiện tại, chúng tôi sẽ kiểm tra và cài đặt hai gói liên quan đến GPIO. Trong Chương 2, Bắt đầu với Python và IoT, và Chương 5, Kết nối Raspberry Pi của bạn với Thế giới thực, chúng tôi sẽ trình bày chi tiết hơn về các gói GPIO này và các giải pháp thay thế khác

Trong thư mục mã nguồn chương01, bạn sẽ tìm thấy một tệp có tên gpio_pkg_check. py , được sao chép trong phần sau. Chúng ta sẽ sử dụng tệp này làm cơ sở để tìm hiểu về quản lý gói và pip trong ngữ cảnh của môi trường ảo Python. Tập lệnh này chỉ báo cáo tính khả dụng của gói Python tùy thuộc vào việc sử dụng nhập thành công hay phát sinh ngoại lệ.

$ python3 --version
Python 3.7.3
0

Hãy kiểm tra tính khả dụng của các gói GPIO bằng cách sử dụng gpio_pkg_check. py và với pip. Tôi sẽ loại bỏ sự hồi hộp bằng cách nói với bạn rằng chúng sẽ không khả dụng trong môi trường ảo mới tạo của bạn (chưa), tuy nhiên, chúng tôi sẽ cài đặt chúng

Ghi chú. Chúng đã được cài đặt ở cấp hệ thống nếu bạn muốn tự kiểm tra bằng cách chạy tập lệnh này bên ngoài môi trường ảo của mình

Các bước sau đây sẽ hướng dẫn chúng tôi quy trình nâng cấp pip, khám phá các tùy chọn của công cụ và cài đặt các gói

  1. Bước đầu tiên, chúng ta sẽ nâng cấp công cụ pip. Trong cửa sổ Terminal, hãy chạy lệnh sau, nhớ rằng tất cả các lệnh theo sau phải được thực hiện trong một  đã kích hoạt v . irtual environment—meaning you should see the text (venv) in the Terminal prompt:
$ python3 --version
Python 3.7.3
1

Lệnh nâng cấp trước đó có thể mất một hoặc hai phút để hoàn thành và có khả năng sẽ xuất nhiều văn bản vào Terminal

Bạn đang phải đối mặt với vấn đề pip? . Đây là bước đầu tiên được đề xuất sau khi tạo môi trường ảo Python mới để nâng cấp pip

  1. Với pip hiện đã được nâng cấp, chúng ta có thể xem những gói Python nào đã được cài đặt trong môi trường ảo của mình bằng lệnh pip list 
$ python3 --version
Python 3.7.3
2

Những gì chúng ta thấy ở phần trước là các gói Python mặc định trong môi trường ảo mới của chúng ta. Đừng lo lắng nếu danh sách gói chính xác hoặc số phiên bản không khớp chính xác với ví dụ

  1. Chạy tập lệnh Python của chúng tôi bằng python  gpio_pkg_check. py  lệnh và nhận thấy rằng các gói GPIO của chúng tôi chưa được cài đặt.
$ python3 --version
Python 3.7.3
3
  1. Để cài đặt hai gói GPIO bắt buộc của chúng tôi, chúng tôi sử dụng lệnh cài đặt pip như trong ví dụ sau
$ python3 --version
Python 3.7.3
4
  1. Bây giờ, hãy chạy lại lệnh danh sách pip;
$ python3 --version
Python 3.7.3
5

Bạn có thể nhận thấy rằng có một gói tên là colorzero (đây là thư viện thao tác màu) mà chúng tôi đã không cài đặt.   gpiozero  (phiên bản 1. 5. 0)  có phần phụ thuộc vào   colorzero, vì vậy pip đã tự động cài đặt nó cho chúng tôi.

  1. Chạy lại python gpio_pkg_check. py và bây giờ chúng tôi thấy rằng các mô-đun Python của chúng tôi có sẵn để nhập
$ python3 --version
Python 3.7.3
6

Tuyệt quá. Bây giờ chúng tôi có một môi trường ảo với hai gói GPIO được cài đặt. Khi bạn làm việc với các dự án Python, chắc chắn bạn sẽ cài đặt ngày càng nhiều gói và muốn theo dõi chúng.

  1. Chụp nhanh các gói bạn đã cài đặt trước đó bằng lệnh   pip freeze  .
$ python3 --version
Python 3.7.3
7

Ví dụ trước đóng băng tất cả các gói đã cài đặt vào một tệp có tên  requirements. txt , đây là tên tệp phổ biến được sử dụng cho mục đích này.

  1. Nhìn vào bên trong các yêu cầu. txt và bạn sẽ thấy tất cả các gói Python được liệt kê cùng với số phiên bản của chúng
$ python3 --version
Python 3.7.3
8

Trong tương lai, nếu bạn di chuyển dự án Python của mình sang một máy khác hoặc một môi trường ảo mới, thì bạn có thể sử dụng  yêu cầu của mình. txt để cài đặt tất cả các gói đã chụp của bạn trong một lần bằng cách sử dụng yêu cầu pip install -r. txt lệnh.

yêu cầu của chúng tôi. txt cho thấy chúng tôi đã cài đặt GPIOZero phiên bản 1. 5. 0, phiên bản hiện tại tại thời điểm viết. Phiên bản này phụ thuộc vào phiên bản ColorZero 1. 1. Có thể các phiên bản khác nhau (trong quá khứ hoặc tương lai) của GPIOZero có thể có các phụ thuộc khác với các phiên bản được hiển thị trong ví dụ của chúng tôi, do đó, các yêu cầu của riêng bạn. txt khi thực hiện bài tập ví dụ có thể khác

Hiện chúng ta đã hoàn thành vòng đời cài đặt cơ bản của các gói Python bằng cách sử dụng pip. Lưu ý rằng bất cứ khi nào bạn cài đặt các gói mới với cài đặt pip, bạn cũng cần chạy lại pip freeze > tests. txt để nắm bắt các gói mới và phần phụ thuộc của chúng

Để kết thúc quá trình khám phá của chúng tôi về quản lý gói và pip, đây là một số lệnh pip phổ biến khác

$ python3 --version
Python 3.7.3
9

Xin chúc mừng. Chúng tôi đã đạt được một mốc quan trọng và đề cập đến các nguyên tắc môi trường ảo thiết yếu mà bạn có thể sử dụng cho bất kỳ dự án Python nào, ngay cả những dự án không liên quan đến Raspberry Pi.  

Trong hành trình Python của mình, bạn cũng sẽ bắt gặp các công cụ và trình cài đặt gói khác có tên easy_install và setuptools . Cả hai đều có công dụng của chúng; .

Bây giờ chúng ta đã biết cách tạo một môi trường ảo và cài đặt các gói, hãy xem  xem cấu trúc thư mục dự án Python điển hình như ~/pyiot/chapter01 and discover what lies beneath the venv folder.

 

Cấu tạo  của môi trường ảo

Phần này liên quan đến   venv,   mà chúng tôi có . Ví dụ này cũng dành riêng cho HĐH Raspbian và là điển hình của HĐH dựa trên Unix tiêu chuẩn. Ở mức tối thiểu, điều quan trọng là phải hiểu cấu trúc cơ bản của việc triển khai môi trường ảo vì chúng ta sẽ trộn mã lập trình Python của riêng mình với các tệp và thư mục tạo nên môi trường ảo.  will apply to virtualenv but not pipenvwhich we listed as alternative virtual environment tools. The example is also specific to a Raspbian OS and is typical of a standard Unix-based OS. It's important to, at a minimum, understand the basic structure of a virtual environment deployment since we will be mixing our own Python programming code in with the files and folders that make up the virtual environment.

Trọng lượng nhẹ  venv  đi kèm với Python 3. 3 trở lên là tập con của virtualenv.

Đây là cấu trúc thư mục của môi trường ảo của chúng tôi. Đúng, đó là ảnh chụp màn hình từ máy Mac. Đó là để tôi có thể xem mọi thứ trên màn hình cùng một lúc

Python có thể được sử dụng cho các dự án IoT không?

Hình 1. 1 – Nội dung của một   thư mục môi trường ảo venv

T các điểm sau đây giải thích các thư mục con cốt lõi được tìm thấy trong  ~/pyiot/chapter01 của chúng tôi .  folder after we ran python3 -m venv venv and installed packages using pip:

  • Thư mục   venv chứa tất cả các tệp môi trường ảo Python. Thực tế không cần thiết phải chạm vào bất kỳ thứ gì trong thư mục này theo cách thủ công—hãy để các công cụ làm việc đó giúp bạn. Hãy nhớ rằng thư mục được đặt tên là venv  chỉ bởi vì đó là tên mà chúng tôi đã đặt cho thư mục đó khi thư mục được tạo.
  • Thư mục venv/bin  chứa trình thông dịch Python (trong trường hợp venv, có các liên kết tượng trưng đến trình thông dịch hệ thống) và các công cụ Python cốt lõi khác, bao gồm cả pip.
  • Bên dưới   venv/lib   thư mục là tất cả các .  pip install.
  • Tệp nguồn Python của chúng tôi,  gpio_pkg_check. py,  nằm trong thư mục  cấp cao nhất,  ~/pyiot/ . ; however, you can create sub-folders here to help to organize your code and non-code files.
  • Cuối cùng, yêu cầu. txt  theo quy ước nằm trong thư mục dự án hàng đầu.

Thư mục môi trường ảo  venv  không thực sự cần phải được giữ trong thư mục dự án; .  activate command.

Thư mục  venv  của bạn và mọi thứ bên dưới thư mục  không nên . txt. Miễn là bạn cóđáp ứng các yêu cầu hiện tại. txt, bạn luôn có thể tạo lại môi trường ảo của mình và khôi phục các gói về trạng thái đã biết.

Điều quan trọng là phải hiểu rằng, với tư cách là nhà phát triển Python, bạn sẽ trộn mã lập trình của riêng mình với các tệp và thư mục tạo thành một phần của hệ thống môi trường ảo và bạn nên thực dụng khi chọn tệp và thư mục nào được thêm vào kiểm soát phiên bản của mình

Điểm cuối cùng này rất quan trọng vì hệ thống môi trường ảo có thể có kích thước lên tới nhiều megabyte (và thường lớn hơn mã chương trình của bạn nhiều lần) không cần lập phiên bản (vì chúng tôi luôn có thể tạo lại môi trường ảo miễn là chúng tôi có yêu cầu. txt), cộng với nền tảng máy chủ cụ thể (nghĩa là sẽ có sự khác biệt giữa Windows, Mac và Linux), cộng với sẽ có sự khác biệt giữa các công cụ môi trường ảo khác nhau (ví dụ: venv so với pipenv). Do đó, môi trường ảo thường không di động trong các dự án có nhiều nhà phát triển làm việc trên các máy tính khác nhau

Bây giờ chúng ta đã tìm hiểu sơ qua cấu trúc  tệp và thư mục  và tầm quan trọng của việc hiểu cấu trúc này, we will continue and look at alternative ways of running a script that is sandboxed to a virtual environment.

 

Các phương pháp thay thế để thực thi tập lệnh Python

Chúng ta hãy nhanh chóng chuyển sự chú ý của chúng ta sang các cách thay thế mà chúng ta có thể thực thi tập lệnh Python. Như chúng ta sẽ tìm hiểu, việc chọn phương pháp thích hợp hoàn toàn dựa trên cách thức và  từ đâu bạn định bắt đầu tập lệnh của mình và liệu mã của bạn có yêu cầu quyền nâng cao hay không.

Cách phổ biến nhất để chạy tập lệnh Python là từ trong môi trường ảo của nó và với sự cho phép của người dùng hiện đang đăng nhập. Tuy nhiên, sẽ có những trường hợp chúng ta cần chạy tập lệnh với tư cách là người dùng root hoặc từ bên ngoài môi trường ảo được kích hoạt

Dưới đây là những cách chúng ta sẽ khám phá

  • Sử dụng sudo với môi trường ảo
  • Thực thi các tập lệnh Python bên ngoài môi trường ảo của chúng
  • Chạy tập lệnh Python khi khởi động

Hãy bắt đầu bằng cách học cách chạy tập lệnh Python với quyền của người dùng root

 

Sử dụng sudo  trong môi trường ảo

Tôi chắc chắn rằng trong khi làm việc trên Raspberry Pi, bạn đã phải thực thi các lệnh trong Terminal có tiền tố sudo vì chúng yêu cầu quyền root. Nếu bạn cần chạy tập lệnh Python trong môi trường ảo với quyền root, bạn phải sử dụng đường dẫn đầy đủ đến trình thông dịch Python của môi trường ảo của bạn

Chỉ thêm tiền tố sudo trước python, như trong ví dụ sau, không hoạt động trong hầu hết các trường hợp, ngay cả khi chúng ta đang ở trong môi trường ảo. Hành động sudo sẽ sử dụng Python mặc định có sẵn cho người dùng root, như thể hiện trong nửa sau của ví dụ

print "Hello"  # No parentheses - This only works in Python 2, a dead give-away that this script is for Python 2.

print("Hello") # With parentheses - this will work in Python 2 and Python 3
0

Cách chính xác để chạy tập lệnh với quyền root là chuyển đường dẫn tuyệt đối tới trình thông dịch Python của môi trường ảo của bạn. Chúng ta có thể tìm thấy đường dẫn tuyệt đối bằng cách sử dụng lệnh which python  command từ bên trong một môi trường ảo được kích hoạt.

print "Hello"  # No parentheses - This only works in Python 2, a dead give-away that this script is for Python 2.

print("Hello") # With parentheses - this will work in Python 2 and Python 3
1

Bây giờ, chúng tôi sudo trình thông dịch Python của môi trường ảo của chúng tôi và tập lệnh sẽ chạy với tư cách là người dùng root và trong nội dung của môi trường ảo của chúng tôi

print "Hello"  # No parentheses - This only works in Python 2, a dead give-away that this script is for Python 2.

print("Hello") # With parentheses - this will work in Python 2 and Python 3
2

Tiếp theo, chúng ta sẽ xem cách chạy tập lệnh Python được đóng hộp cát trong môi trường ảo từ bên ngoài môi trường ảo của nó.  

 

Thực thi  Tập lệnh Python bên ngoài môi trường ảo của chúng

Một phần mở rộng tự nhiên cho cuộc thảo luận trước về sudo là làm cách nào để tôi chạy một tập lệnh Python từ bên ngoài môi trường ảo của nó? . chỉ cần đảm bảo rằng bạn đang sử dụng đường dẫn tuyệt đối tới trình thông dịch Python của môi trường ảo của bạn

Ghi chú. Trong hai ví dụ sau, chúng ta không ở trong môi trường ảo—không có  $ (venv)  trên lời nhắc. Nếu bạn vẫn cần thoát khỏi môi trường ảo Python của mình, hãy nhập hủy kích hoạt.

Lệnh sau sẽ chạy tập lệnh với tư cách là người dùng hiện đang đăng nhập (theo mặc định, là người dùng pi)

print "Hello"  # No parentheses - This only works in Python 2, a dead give-away that this script is for Python 2.

print("Hello") # With parentheses - this will work in Python 2 and Python 3
3

Hoặc để chạy tập lệnh với quyền root, tiền tố sudo

print "Hello"  # No parentheses - This only works in Python 2, a dead give-away that this script is for Python 2.

print("Hello") # With parentheses - this will work in Python 2 and Python 3
4

Vì chúng tôi đang sử dụng trình thông dịch Python  của môi trường ảo, nên chúng tôi vẫn bị hộp cát trong môi trường ảo của mình và mọi gói Python mà chúng tôi đã cài đặt đều khả dụng.

Tiếp theo, chúng ta sẽ tìm hiểu cách tạo tập lệnh Python chạy bất cứ khi nào bạn khởi động Raspberry Pi

 

Chạy tập lệnh Python khi khởi động

Sẽ đến lúc bạn phát triển một dự án IoT tuyệt vời và bạn muốn nó chạy tự động mỗi khi bạn khởi động Raspberry Pi. Đây là một cách đơn giản để đạt được điều này bằng tính năng của cron, bộ lập lịch Unix. Nếu bạn không quen thuộc với những kiến ​​thức cơ bản về cron, hãy tìm kiếm hướng dẫn cron trên web—bạn sẽ tìm thấy rất nhiều hướng dẫn về cron. Tôi đã cung cấp các liên kết được tuyển chọn trong phần Đọc thêm

Dưới đây là các bước để định cấu hình cron và tạo tập lệnh chạy khi khởi động

  1. Trong thư mục dự án của bạn, hãy tạo một tập lệnh bash. Tôi đã đặt tên cho nó là run_on_boot. sh
print "Hello"  # No parentheses - This only works in Python 2, a dead give-away that this script is for Python 2.

print("Hello") # With parentheses - this will work in Python 2 and Python 3
5

Tập lệnh bash này sẽ chạy tập lệnh Python bằng cách sử dụng các đường dẫn tuyệt đối cho cả tập lệnh và trình thông dịch Python của nó. Ngoài ra, nó ghi lại bất kỳ đầu ra tập lệnh nào và lưu trữ nó trong một tệp nhật ký. Đối với ví dụ này, chúng ta chỉ cần chạy và ghi lại kết quả của gpio_pkg_check. py khi khởi động. Đó là dòng cuối cùng liên kết mọi thứ lại với nhau, chạy và ghi nhật ký tập lệnh Python của chúng tôi. Phần 2>&1 ở cuối là cần thiết để đảm bảo rằng các lỗi, ngoài đầu ra tiêu chuẩn, cũng được ghi lại

  1. Đánh dấu run_on_boot. tệp sh dưới dạng tệp thực thi.
print "Hello"  # No parentheses - This only works in Python 2, a dead give-away that this script is for Python 2.

print("Hello") # With parentheses - this will work in Python 2 and Python 3
6

Nếu bạn chưa quen với lệnh chmod (chmod có nghĩa là thay đổi chế độ), những gì chúng tôi đang làm là cấp quyền cho hệ điều hành thực thi lệnh run_on_boot. sh  tệp. Các u+x  tham số  . for the current User, make the file eXecutable. Để tìm hiểu thêm về chmod, bạn có thể nhập chmod --help hoặc . in the Terminal.

  1. Chỉnh sửa tệp crontab của bạn, đây là tệp lưu trữ các quy tắc lập lịch cron
print "Hello"  # No parentheses - This only works in Python 2, a dead give-away that this script is for Python 2.

print("Hello") # With parentheses - this will work in Python 2 and Python 3
7
  1. Thêm mục sau vào tệp crontab của bạn, sử dụng đường dẫn tuyệt đối đến run_on_boot. sh  bash script mà chúng ta đã tạo ở bước 1.
print "Hello"  # No parentheses - This only works in Python 2, a dead give-away that this script is for Python 2.

print("Hello") # With parentheses - this will work in Python 2 and Python 3
8

Đừng quên ký tự & ở cuối dòng. Điều này đảm bảo tập lệnh chạy trong nền

  1. Chạy run_on_boot. sh theo cách thủ công trong Terminal để đảm bảo nó hoạt động. Gpio_pkg_check. tệp nhật ký phải được tạo và chứa đầu ra của tập lệnh Python.
print "Hello"  # No parentheses - This only works in Python 2, a dead give-away that this script is for Python 2.

print("Hello") # With parentheses - this will work in Python 2 and Python 3
9
  1. Khởi động lại Raspberry Pi của bạn
$ cd ~
$ git clone https://github.com/PacktPublishing/Practical-Python-Programming-for-IoT
$ mv Practical-Python-Programming-for-IoT pyiot

0
  1. Sau khi Raspberry Pi khởi động lại xong, gpio_pkg_check. log  tệp giờ đây sẽ chứa các dòng bổ sung, cho biết rằng tập lệnh thực sự đã chạy khi khởi động.
$ cd ~
$ git clone https://github.com/PacktPublishing/Practical-Python-Programming-for-IoT
$ mv Practical-Python-Programming-for-IoT pyiot

1

Nếu bạn không nhìn thấy đầu ra bổ sung trong  gpio_pkg_check. log sau khi khởi động lại, hãy kiểm tra kỹ xem đường dẫn tuyệt đối mà bạn đã nhập trong crontab có chính xác không và nó có hoạt động theo cách thủ công theo bước 5 không. Ngoài ra, hãy xem lại tệp nhật ký hệ thống,  /var/log/syslog và tìm kiếm văn bản, run_on_boot. sh.

Ví dụ dựa trên cron của chúng tôi về chạy tập lệnh khi khởi động là một trong nhiều tùy chọn có sẵn trong các hệ điều hành dựa trên Unix như Raspbian. Bạn có thể tìm thấy một tùy chọn phổ biến và nâng cao khác sử dụng systemd trên trang web Raspberry Pi tại https. //www. mâm xôi. org/tài liệu/linux/cách sử dụng/systemd. md. Bất kể bạn thích tùy chọn nào, điểm quan trọng cần nhớ là đảm bảo các tập lệnh Python của bạn chạy từ bên trong môi trường ảo của chúng

Chúng ta hiện đã biết   các phương pháp thay thế để chạy tập lệnh Python,  sẽ giúp bạn trong quá trình .

Tiếp theo, bây giờ chúng ta sẽ chuyển sang phần đảm bảo Raspberry Pi của bạn được thiết lập và định cấu hình chính xác cho GPIO và giao diện điện tử mà chúng ta sẽ đi sâu vào chương tiếp theo, Chương 2, Getting Started with Python and IoT, and subsequent chapters.

 

Định cấu hình giao diện GPIO trên Raspberry Pi của chúng tôi

Trước khi chúng tôi có thể bắt đầu làm việc với các thư viện Python GPIO và điều khiển thiết bị điện tử, một nhiệm vụ chúng tôi cần thực hiện là bật giao diện GPIO trên Raspberry Pi của bạn. Mặc dù chúng tôi đã cài đặt các gói Python để kiểm soát GPIO, nhưng chúng tôi vẫn chưa thông báo cho Raspbian OS rằng chúng tôi muốn sử dụng các Ghim GPIO của Raspberry Pi cho các trường hợp cụ thể. Hãy làm điều đó ngay bây giờ

Dưới đây là các bước để làm theo

  1. Từ màn hình Raspbian của bạn, điều hướng đến menu Raspberry . Tùy chọn . Cấu hình Raspberry Pi ,   như minh họa ở đây trong Hình 1. 2.

Python có thể được sử dụng cho các dự án IoT không?

Hình 1. 2 Vị trí của mục menu Cấu hình Raspberry Pi

Hoặc, giao diện có thể được quản lý tại dòng lệnh bằng sudo raspi-config   lệnh < . and navigating to the Interfacing Options menu.

  1. Bật tất cả các giao diện như trong ảnh chụp màn hình sau .

Python có thể được sử dụng cho các dự án IoT không?

Hình 1. 3 - Hộp thoại Cấu hình Raspberry Pi

  1. Nhấp vào nút OK .

Sau khi nhấp vào nút OK  , bạn có thể được nhắc khởi động lại Raspberry Pi của mình; . Chúng ta sẽ xem xét điều đó tiếp theo. do not confirm the reboot just yet because there is one more task we need to perform first. We'll look at that next.

 

Định cấu hình daemon PiGPIO

Chúng ta cũng cần khởi động trình nền PiGPIO, đây là một dịch vụ hệ thống cần chạy để chúng ta có thể sử dụng PiGPIO  GPIO .

Về mặt kiến ​​trúc, thư viện PiGPIO bao gồm hai phần một dịch vụ máy chủ và một máy khách giao tiếp qua các đường ống hoặc ổ cắm cục bộ tới dịch vụ. Chúng tôi sẽ đề cập nhiều hơn về kiến ​​trúc cơ bản này trong Chương 5, Kết nối Raspberry Pi của bạn với Thế giới thực.

Thực hiện các thao tác sau trong Terminal. Thao tác này sẽ khởi động trình nền PiGPIO và sẽ đảm bảo rằng trình nền PiGPIO được khởi động tự động khi Raspberry Pi của bạn khởi động

$ cd ~
$ git clone https://github.com/PacktPublishing/Practical-Python-Programming-for-IoT
$ mv Practical-Python-Programming-for-IoT pyiot

2

Bây giờ, đã đến lúc khởi động lại Raspberry Pi của bạn. Vì vậy, hãy nghỉ ngơi trong khi Raspberry Pi của bạn khởi động lại. Bạn xứng đáng vì chúng tôi đã bảo hiểm rất nhiều.  

 

Bản tóm tắt

Trong chương này, chúng ta đã khám phá hệ sinh thái Python là một phần của hệ điều hành dựa trên Unix điển hình như Raspbian OS và biết rằng Python là thành phần cốt lõi của công cụ hệ điều hành. Sau đó, chúng tôi đã đề cập đến cách tạo và điều hướng môi trường ảo Python để chúng tôi có thể hộp cát các dự án Python của mình để chúng không can thiệp lẫn nhau hoặc hệ sinh thái Python cấp hệ thống

Tiếp theo, chúng ta đã học cách sử dụng công cụ quản lý gói Python, pip, để cài đặt và quản lý các phần phụ thuộc của thư viện Python từ bên trong môi trường ảo và chúng ta đã thực hiện việc này bằng cách cài đặt thư viện GPIOZero và PiGPIO. Và vì sẽ có lúc chúng ta cần thực thi tập lệnh Python với tư cách là người dùng root, từ bên ngoài môi trường ảo của nó hoặc trong khi khởi động, chúng tôi cũng đã đề cập đến các kỹ thuật khác nhau này

Theo mặc định, Raspbian không kích hoạt tất cả các giao diện GPIO của nó, vì vậy chúng tôi đã thực hiện cấu hình cần thiết để kích hoạt các tính năng này để chúng sẵn sàng sử dụng trong các chương sau. Chúng tôi cũng đã bắt đầu và tìm hiểu cách thiết lập dịch vụ daemon PiGPIO để dịch vụ này khởi động mỗi khi khởi động Raspberry Pi của bạn

Kiến thức cốt lõi mà bạn có được trong chương này sẽ giúp bạn thiết lập và điều hướng chính xác các môi trường phát triển Python có hộp cát cho các dự án IoT (và không phải IoT) của riêng bạn, đồng thời cài đặt các phụ thuộc thư viện một cách an toàn để chúng không can thiệp vào các dự án Python khác của bạn hoặc . Sự hiểu biết của bạn về các cách khác nhau để thực thi chương trình Python cũng sẽ giúp bạn chạy các dự án của mình với quyền người dùng nâng cao (nghĩa là với tư cách là người dùng root) hoặc khi khởi động, nếu dự án của bạn có những yêu cầu này

Tiếp theo, trong Chương 2, Bắt đầu với Python và IoT, chúng ta sẽ đi thẳng vào Python và điện tử, đồng thời tạo một chương trình hỗ trợ internet toàn diện có thể điều khiển đèn LED qua internet. Chúng ta sẽ xem xét hai cách thay thế để nhấp nháy đèn LED bằng cách sử dụng thư viện GPIOZero và PiGPIO  GPIO trước khi kết nối đèn LED với Internet bằng cách sử dụng  dịch vụ trực tuyến . io, là lớp mạng của chúng tôi.

 

Câu hỏi

Như chúng tôi đã kết thúc, đây là danh sách các câu hỏi để bạn kiểm tra kiến ​​thức của mình về tài liệu của chương này. Bạn sẽ tìm thấy câu trả lời trong phần Đánh giá của

Chúng tôi có thể sử dụng Python cho các dự án IoT không?

Việc hiểu cách các thành phần phần cứng tương tác với internet để thu thập và phân tích dữ liệu người dùng trở nên quan trọng hơn bao giờ hết. Internet of Things (IoT), kết hợp với ngôn ngữ mã nguồn mở phổ biến Python, có thể được sử dụng để xây dựng các hệ thống IoT mạnh mẽ và thông minh với giao diện trực quan .

Python có đủ cho IoT không?

Một lựa chọn ngôn ngữ lập trình theo yêu cầu khác để phát triển Sản phẩm IoT, Python cung cấp khả năng đọc mã liền mạch và các tính năng cú pháp đơn giản. Là một ngôn ngữ thông dịch, nó tương thích cao với lập trình hướng đối tượng, có cấu trúc và chức năng .

Ngôn ngữ nào được sử dụng cho các dự án IoT?

JavaScript. Mặc dù nhiều người vẫn nghĩ JavaScript là ngôn ngữ để bật lên các hộp cảnh báo trên các trang web, nhưng mức độ phổ biến tương đối mới của ngôn ngữ này trên máy chủ khiến nó trở thành một lựa chọn phổ biến đáng ngạc nhiên cho các ứng dụng IoT