Độ ẩm, Nhiệt độ và Áp suất là ba thông số cơ bản để xây dựng bất kỳ Trạm thời tiết nào và để đo các điều kiện môi trường. Trước đây chúng tôi đã xây dựng một Trạm thời tiết nhỏ bằng Arduino và lần này chúng tôi đang mở rộng trạm thời tiết với Raspberry Pi. Dự án dựa trên IoT này nhằm mục đích hiển thị các thông số Độ ẩm, Nhiệt độ và Áp suất hiện tại trên màn hình LCD cũng như trên máy chủ Internet sử dụng Raspberry Pi, biến nó thành Trạm thời tiết Raspberry Pi. Bạn có thể cài đặt thiết lập này ở bất cứ đâu và có thể theo dõi điều kiện thời tiết của địa điểm đó từ bất kỳ đâu trên thế giới qua internet, nó sẽ không chỉ hiển thị dữ liệu hiện tại mà còn có thể hiển thị các giá trị trong quá khứ dưới dạng Đồ thị.
Chúng tôi đã sử dụng cảm biến độ ẩm & nhiệt độ DHT11 để cảm nhận nhiệt độ và mô-đun cảm biến áp suất BM180 để đo áp suất khí quyển. Thang độ C Nhiệt kế và thang đo phần trăm Máy đo độ ẩm hiển thị nhiệt độ và độ ẩm xung quanh thông qua màn hình LCD và áp suất khí quyển được hiển thị bằng milibar hoặc hPa (hectopascal). Tất cả dữ liệu này được gửi đến máy chủ ThingSpeak để giám sát trực tiếp từ mọi nơi trên thế giới qua internet. Hãy kiểm tra Video trình diễn và Chương trình Python, được đưa ra ở cuối hướng dẫn này.
Làm việc và Thiết lập ThingSpeak:
Dự án dựa trên IoT này có bốn phần. Đầu tiên cảm biến DHT11 cảm nhận Dữ liệu Độ ẩm & Nhiệt độ và cảm biến BM180 đo áp suất khí quyển. Thứ hai, Raspberry Pi đọc đầu ra của mô-đun cảm biến DHT11 bằng cách sử dụng giao thức dây đơn và đầu ra của cảm biến áp suất BM180 bằng cách sử dụng giao thức I2C và trích xuất cả hai giá trị cảm biến thành một số phù hợp theo tỷ lệ phần trăm (độ ẩm), thang độ C (nhiệt độ), hectoPascal hoặc milibar (áp suất). Thứ ba, các giá trị này được gửi đến máy chủ ThingSpeak bằng cách sử dụng Wi-Fi có sẵn của Raspberry Pi 3. Và cuối cùng ThingSpeak phân tích dữ liệu và hiển thị nó dưới dạng Biểu đồ. Màn hình LCD cũng được sử dụng để hiển thị cục bộ các giá trị này.
ThingSpeak cung cấp công cụ rất tốt cho các dự án dựa trên IoT. Bằng cách sử dụng trang web ThingSpeak, chúng tôi có thể giám sát dữ liệu của mình và kiểm soát hệ thống của chúng tôi qua Internet, sử dụng các Kênh và trang web do ThingSpeak cung cấp. ThingSpeak 'Thu thập' dữ liệu từ các cảm biến, 'Phân tích và Hình ảnh hóa' dữ liệu và 'Hành động' bằng cách kích hoạt phản ứng. Trước đây chúng tôi đã giải thích chi tiết về việc gửi dữ liệu đến ThingSpeak, bạn có thể kiểm tra ở đó. Ở đây chúng tôi giải thích ngắn gọn cách sử dụng ThingSpeak cho trạm Thời tiết Raspberry Pi này.
Trước tiên, bạn cần tạo tài khoản trên trang web ThingSpeak và tạo một 'Kênh mới' trong đó. Trong kênh mới, bạn phải xác định một số trường cho dữ liệu bạn muốn theo dõi, như trong dự án này, chúng tôi sẽ tạo ba trường cho dữ liệu Độ ẩm, Nhiệt độ và Áp suất.
Bây giờ hãy nhấp vào tab 'Khóa API' và lưu các khóa API Viết và Đọc, ở đây chúng tôi chỉ sử dụng khóa Viết. Bạn cần Sao chép khóa này trong biến 'khóa' trong Mã.
Sau đó, nhấp vào 'Nhập / Xuất dữ liệu' và sao chép URL yêu cầu GET Feed Channel Feed, đó là:
api.thingspeak.com/update?api_key=30BCDSRQ52AOI3UA&field1=0
Bây giờ, chúng tôi cần 'URL yêu cầu nguồn cấp dữ liệu' này trong mã Python của chúng tôi để mở “api.thingspeak.com” và sau đó gửi dữ liệu bằng cách sử dụng Yêu cầu nguồn cấp dữ liệu này dưới dạng chuỗi truy vấn. Và Trước khi gửi dữ liệu, người dùng cần nhập dữ liệu nhiệt độ, độ ẩm và áp suất vào chuỗi truy vấn này bằng cách sử dụng các biến trong chương trình, hãy kiểm tra Mã ở cuối bài viết này.
URL = 'https://api.thingspeak.com/update?api_key=%s'% key finalURL = URL + "& field1 =% s & field2 =% s"% (humi, temp) + "& field3 =% s"% (sức ép)
Hoạt động của DHT11 dựa trên giao tiếp nối tiếp dây đơn để tìm nạp dữ liệu từ DHT11. Ở đây chúng tôi đã sử dụng thư viện AdaFruit DHT11 để giao tiếp DHT11 với Raspberry Pi. Raspberry Pi ở đây thu thập dữ liệu Độ ẩm và nhiệt độ từ DHT11 và áp suất khí quyển từ cảm biến BMP180, sau đó gửi đến màn hình LCD 16x2 và máy chủ ThingSpeak. ThingSpeak hiển thị Dữ liệu dưới dạng Đồ thị như sau:
Bạn có thể tìm hiểu thêm về Cảm biến DHT11 và Giao diện của nó với Arduino tại đây.
Sơ đồ mạch:
Cấu hình Raspberry Pi và Chương trình Python:
Chúng tôi đang sử dụng ngôn ngữ Python ở đây cho Chương trình. Trước khi viết mã, người dùng cần cấu hình Raspberry Pi. Bạn có thể xem các hướng dẫn trước đây của chúng tôi để Bắt đầu với Raspberry Pi và Cài đặt & Định cấu hình Hệ điều hành Raspbian Jessie trong Pi.
Trước hết, chúng ta cần cài đặt các tệp Thư viện cảm biến DHT Adafruit Python để chạy dự án này trên Raspberry Pi. Để làm điều này, chúng ta cần làm theo các lệnh đã cho:
sudo apt-get install git-core sudo apt-get update git clone https://github.com/adafruit/Adafruit_Python_DHT.git cd Adafruit_Python_DHT sudo apt-get install build-essential python-dev sudo python setup.py install
Sau đó, người dùng cần kích hoạt Raspberry Pi I2C bằng cách đi vào Cấu hình phần mềm RPi:
sudo raspi-config
Sau đó đi tới 'Tùy chọn nâng cao', chọn 'I2C' và 'Bật' nó.
Phần lập trình của dự án này đóng một vai trò rất quan trọng để thực hiện tất cả các hoạt động. Trước hết, chúng tôi bao gồm tất cả các thư viện bắt buộc, các biến khởi tạo và xác định các chân cho LCD và DHT11.
import sys import RPi.GPIO as GPIO import os import Adafruit_DHT import urllib2 import smbus import time from ctypes import c_short #Register Address regCall = 0xAA……………..
Trong def main (): chức năng, bên dưới mã được sử dụng cho việc gửi dữ liệu đến máy chủ và hiển thị nó trên màn hình LCD, liên tục trong khi vòng lặp.
def main (): print 'System Ready…' URL = 'https://api.thingspeak.com/update?api_key=%s'% key print "Wait…." while True: (humi, temp) = readDHT () (áp suất) = readBmp180 () lcdcmd (0x01) lcdstring ("Humi # Temp # P (hPa)") lcdstring (humi + '%' + "% sC% s"% (nhiệt độ, áp suất)) finalURL = URL + "& field1 =% s & field2 =% s"% (humi, temp) + "& field3 =% s"% (áp lực) print finalURL s = urllib2.urlopen (finalURL); print humi + "" + temp + "" + áp suất s.close () time.sleep (10)
Đối với LCD, hàm def lcd_init () được sử dụng để khởi tạo màn hình LCD ở chế độ bốn bit, hàm def lcdcmd (ch) được sử dụng để gửi lệnh tới LCD, hàm def lcddata (ch) được sử dụng để gửi dữ liệu đến LCD và def lcdstring (Str ) hàm được sử dụng để gửi chuỗi dữ liệu đến LCD. Bạn có thể kiểm tra tất cả các chức năng này trong Mã được cung cấp sau đó.
Đã cho sẵn hàm def readDHT () được sử dụng để đọc Cảm biến DHT11:
def readDHT (): humi, temp = Adafruit_DHT.read_retry (Adafruit_DHT.DHT11, DHTpin) return (str (int (humi)), str (int (temp)))
Chức năng def readBmp180 được sử dụng để đọc áp suất từ cảm biến BM180. Cảm biến BM180 cũng có thể cung cấp nhiệt độ nhưng ở đây chúng tôi chỉ sử dụng nó để tính toán áp suất.
def readBmp180 (addr = deviceAdd): value = bus.read_i2c_block_data (addr, regCall, 22) # Đọc dữ liệu hiệu chuẩn # Chuyển đổi dữ liệu byte thành các giá trị từ AC1 = convert1 (value, 0) AC2 = convert1 (value, 2) AC3 = convert1 (giá trị, 4) AC4 = convert2 (giá trị, 6)……………………..
Vì vậy, đây là Trạm thời tiết Raspberry Pi cơ bản, bạn có thể mở rộng nó để đo các thông số khác nhau liên quan đến thời tiết như tốc độ gió, nhiệt độ đất, độ rọi (lux), lượng mưa, chất lượng không khí, v.v.