- Cài đặt AWS IOT Device SDK cho Python trên Raspberry Pi:
- Sơ đồ mạch:
- Lập trình Raspberry Pi của bạn:
- Kiểm tra chương trình python thông qua Shell Window:
- Đang làm việc:
Raspberry Pi luôn là lựa chọn hàng đầu để phát triển các ứng dụng dựa trên IoT nếu có liên quan đến một số cấp độ tính toán. Với sự linh hoạt của python và cộng đồng nhà phát triển mạnh mẽ, rất dễ dàng thu thập, ghi nhật ký, phân tích hoặc báo cáo một tập hợp dữ liệu bằng cách sử dụng Pi. Trong hướng dẫn này, chúng ta sẽ học cách kết hợp sức mạnh của Raspberry Pi với dịch vụ Amazon AWS để xuất bản dữ liệu trực tuyến lên Internet.
Trong hướng dẫn này, chúng tôi sẽ sử dụng cảm biến DHT11 để đọc giá trị Nhiệt độ và Độ ẩm, sau đó kết nối với dịch vụ AWS IOT và cập nhật các giá trị cảm biến bằng AWS IOT SDK. Dữ liệu này sau đó có thể được hiển thị trực quan trong bảng điều khiển Amazon IOT để đảm bảo rằng chúng tôi đang tải dữ liệu được xuất bản lên internet.
Bạn cũng có thể sử dụng Dịch vụ tìm kiếm đàn hồi của AWS để tìm nạp các giá trị cảm biến này và lưu trữ nó trong cơ sở dữ liệu, sau đó sử dụng dịch vụ Trang tổng quan Kibana để trực quan hóa dữ liệu cảm biến dưới dạng đồ thị được vẽ gọn gàng. Đủ thú vị? !!! Vì vậy, Hãy bắt đầu…
Điều kiện tiên quyết:
Hướng dẫn này giả định rằng bạn đã tạo tài khoản AWS miễn phí của mình và biết những điều cơ bản về dịch vụ AWS IoT như tạo một thứ, chứng chỉ, chính sách và xuất bản các giá trị bằng cách sử dụng nó. Nếu khác, hãy đọc hướng dẫn bên dưới.
- Bắt đầu với Amazon AWS IOT với MQTT.fx
Nó cũng giả định rằng bạn biết cách giao diện cảm biến LCD và DHT11 với Raspberry Pi và các thư viện để làm điều tương tự đã được cài đặt trên Pi của bạn. Nếu không, hãy tiếp tục với hướng dẫn dưới đây.
- Giao diện DHT11 với Raspberry Pi
Ở phần cuối của hướng dẫn trên, bạn sẽ tạo ra một thứ trên AWS-IOT và bạn cũng nên có địa chỉ nhà môi giới cho thứ của mình cùng với các chứng chỉ cần thiết để truy cập thứ của bạn. Chúng tôi cũng giả định rằng Raspberry pi của bạn đã được thiết lập với một hệ điều hành và được kết nối với internet. Với những điều này, hãy tiếp tục với hướng dẫn. Nếu bạn chưa quen với Raspberry Pi thì trước tiên hãy xem phần Bắt đầu với Raspberry pi.
Cài đặt AWS IOT Device SDK cho Python trên Raspberry Pi:
Để sử dụng dịch vụ AWS trên Pi, chúng tôi có thể cài đặt một trong hai SDK. Một là SDK JavaScript sử dụng JavaScript làm ngôn ngữ lập trình và một là SDK Python rõ ràng sử dụng python làm ngôn ngữ lập trình. Ở đây, chúng tôi chọn Python làm SDK vì chúng tôi cảm thấy thoải mái hơn với Python so với JavaScript.
Thông tin đầy đủ về AWS IOT SDK có sẵn trên trang GitHub.
Bước 1: Để cài đặt SDK trên Pi của bạn, hãy mở thiết bị đầu cuối bằng cách nhập lệnh sau
git clone
Bước 2: Điều này lẽ ra đã cài đặt thư mục aws trên Pi của bạn, bây giờ hãy điều hướng vào nó bằng lệnh sau.
cd AWS - iốt -device- sdk -python
Bước 3: Bên trong thư mục cài đặt tệp thiết lập bằng dòng bên dưới
python setup.py cài đặt
Sơ đồ mạch:
Về mặt phần cứng, chúng tôi có Raspberry Pi được kết nối với Cảm biến DHT11 và màn hình LCD. DHT11 được sử dụng để nhận giá trị của Nhiệt độ và Độ ẩm và LCD được sử dụng để hiển thị các giá trị và thông tin gỡ lỗi. Sơ đồ mạch cho tương tự được hiển thị bên dưới.
Cả cảm biến LCD và DHT11 đều hoạt động với nguồn điện + 5V, vì vậy chúng tôi sử dụng chân 5V trên Raspberry Pi để cấp nguồn cho cả hai. Một điện trở kéo lên có giá trị 1k được sử dụng trên chân đầu ra của cảm biến DHT11, nếu bạn đang sử dụng một mô-đun, bạn có thể tránh điện trở này.
Một chiếc tông đơ 10k được thêm vào chân Vee của màn hình LCD để kiểm soát mức độ tương phản của màn hình LCD. Ngoài ra, tất cả các kết nối đều khá thẳng. Nhưng hãy lưu ý bạn đang sử dụng chân GPIO nào để kết nối các chân vì chúng tôi sẽ cần trong chương trình của mình. Biểu đồ dưới đây sẽ cho phép bạn tìm ra số pin GPIO.
Sử dụng biểu đồ và thực hiện các kết nối của bạn theo sơ đồ mạch. Tôi đã sử dụng breadboard và dây jumper để tạo kết nối. Vì tôi sử dụng một mô-đun nên tôi đã kết nối trực tiếp nó với Raspberry Pi. Phần cứng của tôi trông như thế này bên dưới
Lập trình Raspberry Pi của bạn:
Trong chương trình python của chúng tôi, chúng tôi phải đọc giá trị của nhiệt độ và độ ẩm, hiển thị nó trên màn hình LCD và cũng xuất bản cả hai giá trị lên Amazon IOT mà chúng tôi đã tạo trong hướng dẫn trước. Vì vậy, hãy đảm bảo rằng bạn đã tạo thứ và bạn có tất cả ba tệp chính và địa chỉ nhà môi giới của thứ mà bạn đã tạo.
Trong chương trình python của chúng tôi, chúng tôi phải liên kết ba tệp chính để Raspberry Pi có thể có quyền truy cập để xuất bản các giá trị trên thiết bị của chúng tôi. Vì vậy, sao chép tất cả ba tệp chính và dán nó trên màn hình của Raspberry pi của bạn vì chúng tôi sẽ cần địa chỉ đường dẫn của chúng trong chương trình của mình.
Các chương trình python hoàn toàn có thể được tìm thấy ở dưới cùng của trang này, bạn có thể sử dụng chương trình sau khi chỉnh sửa địa chỉ môi giới và đường dẫn thư mục theo điều bạn đã tạo. Dưới đây, tôi đã giải thích mã trong các đoạn mã nhỏ.
Chúng tôi bắt đầu bằng cách nhập các thư viện cần thiết cho dự án của chúng tôi. Ba thư viện chính là AWS SDK, thư viện LCD và Thư viện DHT, hãy đảm bảo rằng bạn đã cài đặt cả ba Pi của mình. Các thời gian và datetime thư viện sẽ được cài đặt theo mặc định.
từ AWSIoTPythonSDK.MQTTLib nhập khẩu AWSIoTMQTTClient #import từ AWS-IOT Thư viện thời gian nhập khẩu # Để tạo chậm trễ từ datetime ngày nhập khẩu, datetime #To có được ngày tháng và thời gian nhập khẩu Adafruit_CharLCD như LCD #import thư viện LCD nhập khẩu Adafruit_DHT Thư viện DHT #import cho cảm biến
Trong dòng tiếp theo, chúng tôi phải cung cấp các chi tiết Điều như địa chỉ Nhà môi giới, tên Khách hàng và đường dẫn đến chứng chỉ và các tệp khóa. Ở đây tôi đã sử dụng tên khách hàng là new_Client, bạn có thể sử dụng tên tương tự hoặc bất kỳ tên nào bạn chọn. Địa chỉ nhà môi giới nên được thay đổi thành địa chỉ của thứ mà bạn đã tạo và thư mục đường dẫn cũng nên được thay đổi theo thứ của bạn. Ngoài 2 điều này, bạn không phải thay đổi bất cứ điều gì trong các dòng sau.
myMQTTClient = AWSIoTMQTTClient ("new_Client") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / pi / Desktop / ESP.32_Thing chứng chỉ" "/ home / pi / Desktop / ESP32_Thing Certificates / private.pem.key", "/ home / pi / Desktop / ESP32_Thing Certificates / certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (-1) # Vô hạn ngoại tuyến Xuất bản xếp hàng myMQTTClient. configDrainingFrequency (2) # Draining: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 giây myMQTTClient.configureMQTTOperationTimeout (5) # 5 giây
Tiếp theo, chúng tôi phải xác định chi tiết pin của kết nối của chúng tôi. Số chân GPIO của mỗi chân được cấp cho tên tương ứng của nó. Ở đây chúng tôi đã sử dụng cảm biến DHT trên chân 17 và LCD ở chế độ 4-bit. Mã cho cùng một được hiển thị bên dưới
sensor_name = Adafruit_DHT.DHT11 # chúng tôi đang sử dụng cảm biến DHT11 sensor_pin = 17 #Cảm biến được kết nối với GPIO17 trên Pi lcd_rs = 7 #RS của LCD được kết nối với GPIO 7 trên PI lcd_en = 8 #EN của LCD được kết nối với GPIO 8 trên PI lcd_d4 = 25 # D4 của LCD được kết nối với GPIO 25 trên PI lcd_d5 = 24 # D5 của LCD được kết nối với GPIO 24 trên PI lcd_d6 = 23 # D6 của LCD được kết nối với GPIO 23 trên PI lcd_d7 = 18 # D7 của LCD được kết nối với GPIO 18 trên PI lcd_backlight = 0 #LED không được kết nối nên chúng tôi gán cho 0
Sau đó, chúng tôi khởi tạo màn hình LCD và hiển thị một thông báo giới thiệu nhỏ trên màn hình LCD. Sau đó, chúng tôi sẽ cố gắng kết nối với AWS bằng cách sử dụng địa chỉ nhà môi giới và các tệp chính đã nhập ở trên. Nếu kết nối thành công, màn hình LCD sẽ hiển thị “Đã kết nối với thứ AWS ” hoặc sẽ thử trong 10 giây và nếu không thành công thì màn hình sẽ hiển thị Thông báo lỗi. Nếu bạn nhận được thông báo lỗi, hãy đảm bảo rằng bạn đã tạo thành công thứ và đã liên kết nó đúng cách với mã. Bạn luôn có thể quay lại hướng dẫn trước đó để xem liệu bạn đã tạo đúng cách trong AWS chưa.
if time.time () <connect_time: #try kết nối với AWS trong 10 giây myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "connect", 0) in "MQTT Kết nối ứng dụng khách thành công!" lcd.message ('Đã kết nối với \ n điều AWS') #if được kết nối khác: print "Lỗi: Kiểm tra chi tiết AWS của bạn trong chương trình" lcd.message ('Lỗi: \ n Chi tiết không hợp lệ') # nếu không được kết nối
Khi kết nối được thiết lập thành công, chúng ta bước vào vô hạn trong khi vòng lặp để công bố giá trị của thời gian, nhiệt độ và độ ẩm như một tải trọng. Tải trọng ở đây phải luôn là một chuỗi ở định dạng JSON. Vì vậy, trước tiên chúng ta đọc ngày và giờ hiện tại và lưu nó vào một biến bằng cách sử dụng các dòng dưới đây
now = datetime.utcnow () #get ngày và giờ current_time = now.strftime ('% Y-% m-% dT% H:% M:% SZ') # nhắm thời gian hiện tại ở định dạng chuỗi
Sau đó, chúng tôi đọc các giá trị độ ẩm và nhiệt độ tạo thành cảm biến DHT11 và hiển thị nó trên màn hình LCD. Độ ẩm và nhiệt độ thay đổi sẽ giữ giá trị của độ ẩm và nhiệt độ tương ứng
độ ẩm, nhiệt độ = Adafruit_DHT.read_retry (sensor_name, sensor_pin) #read from sensor
và lưu các giá trị tương ứng theo thang nhiệt độ và độ ẩm
lcd.clear () # Xoá màn hình LCD lcd.message ('Temp =%.1f C'% nhiệt độ) # Hiển thị giá trị của nhiệt độ lcd.message ('\ nHum =%.1f %%'% độ ẩm) # Hiển thị giá trị của Humidity time.sleep (2) # Chờ trong 2 giây rồi cập nhật giá trị
Như đã nói trước đó, tải trọng phải ở dạng chuỗi với dấu ngoặc nhọn xung quanh nó, chúng tôi thêm giá trị ngày, giờ, Nhiệt độ và độ ẩm sau khi chuyển đổi biến thành chuỗi như hình dưới đây.
#prepare tải trọng ở định dạng chuỗi payload = '{"dấu thời gian": "' + current_time + '", "nhiệt độ":' + str (nhiệt độ) + ', "độ ẩm":' + str (độ ẩm) + '}'
Cuối cùng khi tải trọng đã sẵn sàng, chúng tôi phải xuất bản nó lên MQTT Client. Điều này có thể được thực hiện bằng cách sử dụng lệnh myMQTTclient.publish . Trong khi xuất bản cho một thứ chúng ta cũng nên đặt tên cho nó, ở đây tôi đã đặt tên nó là DHT11 / data nhưng bạn có thể đặt tên cho nó bất cứ thứ gì bạn muốn. Nhưng hãy chắc chắn rằng bạn nhớ tên vì chúng tôi sẽ cần đăng ký từ thứ của mình để xem dữ liệu.
Kiểm tra chương trình python thông qua Shell Window:
Khi chương trình đã sẵn sàng, hãy khởi chạy nó bằng cách sử dụng sự lựa chọn của bạn. Tôi đã sử dụng Python IDE để khởi chạy chương trình trên cửa sổ shell. Nếu mọi thứ đều ổn, bạn sẽ nhận được kết nối thông báo thành công và tất cả tải trọng sẽ được hiển thị trên cửa sổ. Bạn có thể kiểm tra xem các giá trị nhiệt độ và độ ẩm có được đọc chính xác hay không. Tải trọng sẽ được cập nhật sau mỗi 5 giây. Cửa sổ shell sẽ trông giống như sau
Nếu bạn gặp bất kỳ sự cố nào, hãy đảm bảo rằng bạn đã cung cấp các chi tiết chính xác và địa chỉ nhà môi giới, đồng thời kiểm tra xem điều đó có thể được kết nối với việc sử dụng phần mềm MQTT.fx hay không. Nếu vỏ hiển thị kết nối MQTT Client thành công và bị treo ở đó, điều đó có nghĩa là cảm biến DHT11 không phản hồi, hãy kiểm tra xem bạn đã kết nối với đúng chân cắm và cảm biến hoạt động chưa.
Đang làm việc:
Sau khi bạn khởi chạy chương trình và nhận được các chi tiết trên trên cửa sổ shell, điều đó có nghĩa là chương trình đó đang phản hồi đúng cách và các giá trị đang được tải lên máy chủ Amazon AWS. Bạn cũng có thể để ý màn hình LCD để kiểm tra xem nó có thông báo Đã xuất bản lên AWS-IoT 5 giây một lần như hình dưới đây không.
Chúng ta có thể vào ứng dụng MQTT.fx và đăng ký chủ đề DHT11 / data . Sau đó, chúng tôi sẽ có thể lấy tất cả dữ liệu đang được xuất bản bởi Raspberry Pi. Dữ liệu này cũng sẽ được cập nhật sau mỗi 5 giây; màn hình MQTT của bạn sẽ trông giống như sau
Như bạn có thể thấy tải trọng đang được nhận trên phần mềm MQTT được đánh dấu bằng màu xanh lam. Bạn cũng có thể xem video dưới đây để biết cách thức hoạt động của dự án. Vì bây giờ chúng tôi có dữ liệu của mình trên internet, chúng tôi có thể sử dụng nó với các công cụ khác do Amazon cung cấp như Elastic search và Lambda để lưu dữ liệu trong cơ sở dữ liệu hoặc trực quan hóa sau đó trên biểu đồ. Có nhiều ứng dụng hơn nữa, dựa trên cách chúng ta có được lợi ích từ dữ liệu.
Hy vọng bạn đã hiểu hướng dẫn và thích xây dựng một cái gì đó tương tự, nếu bạn có bất kỳ vấn đề nào trong việc hoàn thành việc này, hãy đăng nó vào phần bình luận bên dưới hoặc sử dụng diễn đàn để được trợ giúp kỹ thuật.