Hướng dẫn python với iot

Lê Trọng Nhân - Nguyễn Trần Hữu Nguyên - Võ Tấn Phương

Nguyễn Thanh Hải - Phạm Văn Vinh

Trang 2 The Dariu Foundation

Trang 4 The Dariu Foundation

  • Chương 5. Tích hợp với Microbit
    • 1 Giới thiệu.
    • 2 Chương trình cho Microbit.
    • 3 Lập trình cho Gateway.
      • 3 Thêm thư viện lập trình
      • 3 Thêm thư viện cho kết nối Serial
    • 4 Tích hợp với Microbit
    • 5 Câu hỏi ôn tập.
  • Chương 6. Gửi dữ liệu từ Microbit tới Gateway
    • 1 Giới thiệu.
    • 2 Chương trình cho Microbit.
    • 3 Hàm phân tách dữ liệu
    • 4 Hàm đọc dữ liệu Serial.
    • 5 Tích hợp vào Gateway
    • 6 Câu hỏi ôn tập.
  • Chương 7. Nhiều nút nhấn trên Dashboard
    • 1 Giới thiệu.
    • 2 Chương trình cho Microbit trung tâm
    • 3 Tạo mới Feed dữ liệu.
    • 4 Tạo mới nút nhấn trên Dashboard
    • 5 Cải tiến chương trình của Gateway
    • 6 Câu hỏi ôn tập.
  • Chương 8. Điều khiển ngoại vi trên nốt cảm biến
    • 1 Giới thiệu.
    • 2 Kết nối mạch điện cho nốt cảm biến
    • 3 Lập trình cho nốt cảm biến.
    • 4 Câu hỏi ôn tập.
  • Chương 9. Cảm biến quan trắc tích hợp
    • 1 Giới thiệu.
    • 2 Kết nối với DHT11
    • 3 Nguyên lý hoạt động của DHT11
    • 4 Lập trình với DHT11
    • 5 Cải thiện chương trình ở Gateway.
    • 6 Các phiên bản nâng cấp của DHT11
      • 6 Cảm biến DHT22
      • 6 Cảm biến AM2305
    • 7 Câu hỏi ôn tập.
  • Chương 10. Cảm biến tương tự Analog
    • 1 Giới thiệu.
    • 2 Nguyên lý thiết kế cảm biến Analog.
    • 3 Cảm biến khí Gas
    • 4 Đọc dữ liệu từ cảm biến khí Gas.
    • 5 Cảm biến Analog ChiPi
    • 6 Câu hỏi ôn tập.

CHƯƠNG 1

Tạo tài khoản trên Adafruit IO

giao tiếp Zigbee và Wifi trong các ứng dụng nhà thông minh, với khoảng cách giao tiếp ngắn cho đến các giao trên không gian rộng như LoRa hay 3G/4G.

  • Collect: Sau khi dữ liệu được thu thập, chúng sẽ được gửi lên các server tập trung để lưu trữ dữ liệu. Tại đây, một lượng lớn dữ liệu sẽ được đẩy về, tạo ra một thách thức không nhỏ cho các server và phải ứng dụng các công nghệ về Big Data [dữ liệu lớn] để xử lý.

  • Learn: Nhiệm vụ của lớp này là lọc ra các thông tin đặc trưng, có ngữ nghĩa đặc thù cho từng loại ứng dụng. Các công nghệ về Học Máy và hiện tại là Học Sâu [Deep Learning] sẽ được áp dụng ở đây

  • Do: Dựa vào các thông tin đặc trưng, hệ thống sẽ xây dựng nên những quy luật thích nghi theo ngoại cảnh, và đề xuất các quyết định cho hệ thống. Với mỗi quyết định, việc thực thi sẽ được đo đạc một cách tự động, và sai lệnh của quyết định đó so với mục tiêu tối ưu sẽ được xem xét lại cho lần sau. Theo cách này, hệ thống sẽ tự động tích lũy “kinh nghiệm” trong một thời gian dài, để ngày càng trở nên thông minh và hoàn thiện hơn.

Trong giáo trình này, hướng dẫn sẽ tập trung ở lớp Connect , với chức năng gọi là Gateway IoTs. Thiết bị đóng vai trò làm Gateway, sẽ tập hợp thông tin và gửi lên server, cũng như nhận điều khiển từ phía server ở lớp Collect. Chúng tôi sẽ hiện thực Gateway bằng ngôn ngữ lập trình Python. Các nội dung chính trong bài hướng dẫn này sẽ như sau:

  • Kiến trúc 4 thành phần của ứng dụng dựa trên IoT

  • Tạo tài khoản trên Adafruit IO Server

  • Tạo kênh lưu trữ dữ liệu trên Adafruit IO

2 Kiến trúc 4 thành phần của ứng dụng

Dựa trên mô hình 5 lớp của kiến trúc IoTs, chúng ta sẽ phân ứng dụng thành 4 thành phần cơ bản, bao gồm nốt cảm biến, gateway trung tâm, server và các thiết bị để theo dõi dữ liệu và điều khiển từ xa, như trình bày ở hình bên dưới:

Hình 1 : Kiến trúc 4 thành phần trong ứng dụng IoT

Phát triển IoT Gateway bằng Python Trang 7

Hạt nhân trung tâm trong kiến trúc này là Gateway IoT, sẽ được xây dựng bằng cách kết hợp giữa máy tính và một mạch Microbit. Sở dĩ có sự kết hợp này, là vì chức năng của Gateway sẽ được hiện thực bằng ngôn ngữ Python. Máy tính của chúng ta là thiết bị mạnh mẽ và tiện dụng cho yêu cầu này. Thêm nữa, khi triển khai hệ thống, chương trình Python có thể dễ dàng sử dụng lên trên các máy tính nhúng, chẳng hạn như Raspberry PI chẳng hạn. Mạch Microbit được gắn thêm vào với nhu cầu mở rộng kết nối với nhiều mạch cảm biến khác bằng kĩ thuật giao tiếp không dây của mạch Microbit.

Nhiều mạch Microbit có thể đóng vai trò là nốt cảm biến, và gửi dữ liệu về mạch Microbit trung tâm, nơi nó sẽ chuyển dữ liệu lên máy tính. Tại đây, chương trình viết bằng ngôn ngữ Python sẽ gửi dữ liệu này lên server Adafruit IO. Từ đó, các thiết bị theo dõi từ xa như điện thoại di động hay thậm chí là một máy tính khác có thể theo dõi được dữ liệu của hệ thống. Trong trường hợp muốn điều khiển một thiết bị, luồng dữ liệu sẽ đi ngược từ phía thiết bị đầu cuối cho đến nốt cảm biến, để thi hành lệnh điều khiển.

Trong bài hướng dẫn đầu tiên này, chúng ta sẽ bắt đầu tạo tài khoản trên server Adafruite IO, trước khi có thể sử dụng nó để lưu trữ dữ liệu cảm biến và luân chuyển tín hiệu điều khiển.

3 Tạo tài khoản trên Adafruit IO

Bước 1: Vào trang web chính tại địa chỉio.adafruit/. Giao diện sau

đây ở hiện ra.

Hình 1 : Trang chủ của Adafruit IO

Bạn đọc nhấn vào nút Sign In để đăng nhập vào hệ thống nếu như đã có tài khoản. Tuy nhiên, nút này cũng sẽ dẫn chúng ta đến trang tạo mới tài khoản ở bước tiếp theo. Bước 2: Vì chúng ta chưa có tài khoản, nên ở bước này, chúng ta sẽ chọn tiếp Sign Up để đăng kí tài khoản.

Trang 8 The Dariu Foundation

4 Tạo kênh dữ liệu [Feed]

Để có thể lưu dữ liệu trên server, chúng ta cần phải phân loại cho nó. Thông thường, chúng ta gọi là một kênh dữ liệu, hay feed. Mỗi đối tượng trong hệ thống cũng sẽ thường có 1 kênh dữ liệu cho riêng nó. Chẳng hạn như để lưu trạng thái của một bóng đèn, chúng ta cần một kênh dữ liệu, tên là BBC_LED chẳng hạn. Sau khi đăng nhập vào hệ thống thành công, chúng ta bắt đầu tạo một kênh dữ liệu đầu tiên, với các bước hướng dẫn bên dưới.

Bước 1: Mở danh sách kênh dữ liệu, bằng cách nhấn vào Feeds, như minh họa ở hình bên dưới:

Hình 1 : Truy cập vào các kênh dữ liệu

Tiếp theo đó, chọn tiếp vào tính năng View all để liệt kênh tất cả các kênh dữ liệu đang có trong tài khoản, như minh họa ở hình sau đây:

Hình 1 : Danh sách các kênh có sẵn

Trong minh họa ở hình trên, tài khoản của chúng ta chưa có một kênh dữ liệu nào cả, do nó mới được đăng kí ở lần đầu tiên. Một kênh dữ liệu sẽ tạo ra bằng cách nhấn vào nút New Feed.

Bước 2: Điền các thông tin cho kênh dữ liệu, như minh họa ở hình bên dưới.

Trang 10 The Dariu Foundation

Hình 1 : Điền thông tin cần thiết cho kênh dữ liệu

Quan trọng nhất là trường Name của kênh dữ liệu. Bạn đọc nên đặt tên cho nó đi kèm với 1 tiếp đầu ngữ, để có thể dễ dàng phân biệt kênh dữ liệu này là dành cho dự án nào. Trong hướng dẫn này, chúng tôi minh họa cho dữ liệu từ một đèn hiển thị trên Microbit, và đặt tên cho kênh là BBC_LED. Phần mô tả Description chỉ là tùy chọn, bạn đọc có thể ghi thêm các thông tin chú thích. Cuối cùng nhấn vào nút Create. Một kênh mới sẽ được tạo ra và giao diện của chúng ta bây giờ sẽ như sau:

Hình 1 : Kênh dữ liệu mới được tạo thành công

Trong trường hợp muốn xóa một kênh dữ liệu cũ, bạn đọc chỉ cần chọn nó và nhấn nút Delete Feed , như minh họa ở hình bên dưới:

Hình 1 : Xóa một kênh dữ liệu đã có

Phát triển IoT Gateway bằng Python Trang 11

Hình 1 : Cài đặt chia sẻ cho feed

Trong giao diện trên, chúng ta chọn Public ở phần Visibility và cuối cùng, nhấn vào nút Save để hoàn tất việc chỉnh kênh ở chế độ chia sẻ.

Bây giờ, thông tin ở mục Privacy đã thay đổi, với thêm thông tin chỉ dẫn Anyone can see it at this link. Bạn có thể chia sẻ kênh dữ liệu của mình với người khác bằng cách gửi đi đường liên kết này. Tuy nhiên, bước này chỉ cần thiết trong việc kiểm tra kênh dữ liệu có giao tiếp được tức thì hay không. Ngoài ra, nó cũng không thực sự là tính năng có ích trong các ứng dụng mà chúng ta sắp sửa hiện thực. Thông thường, bạn sẽ có nhu cầu che giấu kênh của mình để bảo vệ dữ liệu của hệ thống. Mục đích của chúng ta khi chỉnh kênh thành Public chỉ để đơn giản việc lập trình trong tương lai.

Phát triển IoT Gateway bằng Python Trang 13

6 Câu hỏi ôn tập

  1. Server được giới thiệu trong bài hướng dẫn có tên là gì? A. ThingSpeak B. Google C. Amazon D. Adafruit IO

  2. Một kênh để lưu dữ liệu trên server còn được gọi là gì? A. Client B. Server C. Feed D. Channel

  3. Kiến trúc ứng dụng kết nối vạn vật được đề xuất bởi Timothy Chou có mấy lớp? A. 2 B. 3 C. 4 D. 5

  4. Lớp các thiết bị như cảm biến, máy bơm, các mạch công suất, thuộc lớp nào trong mô hình IoT? A. Things B. Connect C. Collect D. Learn

  5. Gateway IoT thuộc lớp nào trong các lớp dưới đây? A. Things B. Connect C. Collect D. Learn

  6. Để tiện lợi cho việc lập trình trong tương lai, các thao tác nào là cần thiết? A. Tạo kênh dữ liệu có tên gợi nhớ B. Nên có tiếp đầu ngữ cho mỗi kênh dữ liệu C. Chỉnh kênh ở chế độ Public D. Tất cả các thao tác trên

  7. Để truy cập vào thông tin chi tiết của một feed, các thao tác cần thiết là gì? A. Chọn Feeds, chọn kênh dữ liệu [tên feed] B. Chọn Feeds, chọn view all, chọn kênh dữ liệu [tên feed] C. Cả 2 thao tác trên đều được D. Tất cả đều đúng

Đáp án

  1. D 2. C 3. D 4. A 5. C 6. D 7. D

Trang 14 The Dariu Foundation

1 Giới thiệu.

Dashboard có thể được hiểu là một bảng tổng hợp, hiển thị các thông tin cần thiết của một hệ thống. Trên dashboard, thông tin có thể được tổng hợp để hiển thị dưới dạng đồ thị với các dữ liệu lịch sử, thông tin hiện tại cũng như thống kê các giá trị nhỏ nhất, lớn nhất hay các giá trị trung bình. Ngoài ra, Dashboard còn có thể được sử dụng như một bản điều khiển thân thiện, để người dùng có thể tương tác và vận hành hệ thống từ xa. Tùy vào đặc thù của ứng dụng và nơi áp dụng, các yêu cầu của Dashboard có thể khác nhau. Trong các công ty, Dashboard đưa ra một cái nhìn tổng quát về năng suất của từng bộ phận, các xu hướng, các hoạt động, các chỉ số KPI [Key Performance Indicator – hay còn gọi là chỉ số đánh giá thực hiện công việc].

Với mục đích sử dụng khác nhau hoàn toàn, kênh dữ liệu Feed giới thiệu ở bài trước, thường dành cho người quản lý, để kiểm tra dữ liệu thô của hệ thống. Trong khi đó, Dashboard sẽ là một giao diện đẹp và thân thiện đối với người sử dụng. Hai đối tượng này, cũng thường được gọi là Back End dành cho Feed và Front End dành cho Daskboard. Và hiển nhiên, 2 đối tượng này sẽ liên kết chặt chẽ với nhau: Mỗi khi có dữ liệu gửi lên Feed, giao diện trên Daskboard sẽ được cập nhật tương ứng, và ngược lại, mỗi khi có tương tác trên Daskboard, thông tin cũng sẽ được lưu lại trên Feed.

Ở bài này, bạn đọc sẽ được hướng dẫn để tạo một Dashboard đơn giản trên Adafruit IO. Dashboard này là dùng để kết nối với Feed ta đã tạo ở bài trước và có một nút nhấn, để người dùng có thể bật tắt đèn trên mạch Microbit. Giao diện tương tác của người dùng trên Dashboard như sau:

Hình 2 : Giao diện Dashboard điều khiển đèn

Các mục tiêu hướng dẫn trong bài này được tóm tắt như sau:

  • Tạo một Dashboard với một nút nhấn

  • Liên kết Dashboard và Feed dữ liệu

  • Kiểm tra tương tác giữa Dashboard và Feed

Trang 16 The Dariu Foundation

2 Tạo Dashboard mới

Trong phần này, hướng dẫn sẽ trình bày để bạn đọc có thể tạo ra 1 giao diện đơn giản, với một nút nhấn trên Dashboard, dùng để bật/tắt một thiết bị, chẳng hạn như là đèn hiển thị trên mạch Microbit. Giao diện và thao tác để tạo mới một Dash- board cũng khá tương tự với việc tạo mới một Feed ở bài trước, được trình bày chi tiết từng bước như dưới đây.

Bước 1: Sau khi đăng nhập vào Adafruit IO, bạn đọc chọn vào Dashboard , và chọn tiếp View all , như hướng dẫn bên dưới:

Hình 2 : Truy cập vào Dashboard của tài khoản

Bước 2: Nhấn nút +New Dashboard để tạo mới một Dashboard trên Adafruit, như minh họa ở hình sau đây:

Hình 2 : Tạo mới một Dashboard

Sau đó, một cửa sổ sẽ hiện ra cho ta ghi tên và mô tả cho Dashboard của mình. Lưu ý là trường Name thông tin bắt buộc, trong khi đó, trường Description [mô tả] là tùy chọn. Khi đặt tên cho Dashboard, bạn cũng nên thêm những tiếp đầu ngữ để dễ quản lý trong tương lai, như minh họa ở hình bên dưới:

Phát triển IoT Gateway bằng Python Trang 17

Hình 2 : Giao diện khởi tạo cho Dashboard

Trước khi thiết kế các đối tượng giao diện trên Dashboard [trong bài này là một nút nhấn], chúng ta cần cấu hình cho Dashboard ở dạng Public , để tiện chia sẻ trên nhiều thiết bị khác nhau, chẳng hạn như điện thoại hoặc máy tính bảng, để điều khiển và giám sát hệ thống từ xa. Bằng cách chọn vào biểu tượng cài đặt ở phía bên phải, chúng ta chọn tiếp vào Dashboard Privacy , như hướng dẫn sau đây:

Hình 2 : Tùy chỉnh cho Dashboard ở chế độ Public

3 Thiết kế giao diện cho Dashboard

Giao diện mặc định của Dashboard khi mới được tạo ra là chưa có phần tử giao diện nào, chúng ta sẽ bắt đầu thêm một nút nhấn trên giao diện. Bằng cách vào lại biểu tượng cài đặt, và chọn Create New Block , như sau:

Phát triển IoT Gateway bằng Python Trang 19

Hình 2 : Thêm đối tượng giao diện vào Dashboard

Đối tượng giao diện hỗ trợ trên Dashboard là rất phong phú. Tuy nhiên trong bài hướng dẫn này, chúng ta sẽ chọn vào đối tượng đầu tiên. Đối tượng này có tên gọi là Toggle Button , và nó hoàn toàn phù hợp cho một ứng dụng điều khiển Bật/Tắt một thiết bị trong bài này. Sau khi chọn, giao diện sau đây sẽ hiện ra.

Hình 2 : Kết nối với feed đã tạo

Đây là bước quan trọng nhất trong thiết kế giao diện cho Dashboard, khi chúng ta cần phải chọn liên kết cho nó với một Feed dữ liệu. Cho đến bài này, vì chúng ta chỉ có 1 feed dữ liệu [là BBC_LED], nên việc lựa chọn rất đơn giản. Trong trường hợp có nhiều feed dữ liệu, bạn đọc cần phải lựa chọn cho đúng. Sau đó chọn vào Next step và tiếp tục tùy chỉnh các thông tin cài đặt cho giao diện bên dưới.

Trang 20 The Dariu Foundation

Bài Viết Liên Quan

Chủ Đề