Mục lục:

Trạm thời tiết IoT với RPi và ESP8266: 10 bước
Trạm thời tiết IoT với RPi và ESP8266: 10 bước

Video: Trạm thời tiết IoT với RPi và ESP8266: 10 bước

Video: Trạm thời tiết IoT với RPi và ESP8266: 10 bước
Video: Demo project dự báo thời tiết dùng esp8266 nodeMCU và màn hình LCD Gphone 2024, Tháng mười một
Anonim
Trạm thời tiết IoT với RPi và ESP8266
Trạm thời tiết IoT với RPi và ESP8266

Trong các hướng dẫn trước, chúng tôi đã chơi với NodeMCU, các cảm biến và học cách thu thập và ghi dữ liệu trên ThingSpeak (một nền tảng Internet of Things (IoT) cho phép bạn thu thập và lưu trữ dữ liệu cảm biến trên đám mây và phát triển các ứng dụng IoT):

CÓ THỂ DỄ DÀNG HƠN: PHÁT HIỆN DỮ LIỆU THỜI TIẾT TỪ XA: NHIỆT ĐỘ & ĐỘ ẨM CỦA UV VÀ KHÔNG KHÍ

Với hướng dẫn mới này, chúng ta sẽ tìm hiểu cách thực hiện tương tự nhưng lần này, sử dụng Raspberry Pi để thu thập dữ liệu từ một số cảm biến khác nhau và cũng khám phá các cách giao tiếp khác nhau giữa các thiết bị và web:

Cảm biến và loại giao tiếp:

  • DHT22 (Nhiệt độ và Độ ẩm) ==> Giao tiếp kỹ thuật số
  • BMP180 (Nhiệt độ và Áp suất) ==> Giao thức I2C
  • DS18B20 (Nhiệt độ) ==> Giao thức 1 dây

Sơ đồ khối cho thấy những gì chúng ta sẽ nhận được khi kết thúc dự án này:

Hình ảnh
Hình ảnh

Bước 1: Hội đồng quản trị - Hóa đơn nguyên vật liệu

  1. Raspberry Pi V3 - US $ 32,00
  2. Cảm biến nhiệt độ và độ ẩm tương đối DHT22 - 9,95 USD
  3. Điện trở 4K7 ohm
  4. Cảm biến nhiệt độ không thấm nước DS18B20 - USD 5,95
  5. Điện trở 4K7 ohm
  6. Cảm biến áp suất khí quyển, nhiệt độ và độ cao BMP180 - 6,99 USD

Bước 2: Cài đặt Cảm biến Nhiệt độ & Độ ẩm

Cài đặt Cảm biến Nhiệt độ & Độ ẩm
Cài đặt Cảm biến Nhiệt độ & Độ ẩm

Cảm biến đầu tiên được lắp đặt sẽ là DHT22 để thu dữ liệu nhiệt độ không khí và độ ẩm tương đối. Trang ADAFRUIT cung cấp thông tin tuyệt vời về các cảm biến đó. Dưới đây, một số thông tin được lấy từ đó:

Tổng quat

Các cảm biến nhiệt độ & độ ẩm DHT giá rẻ rất cơ bản và chậm nhưng rất phù hợp cho những người có sở thích muốn thực hiện một số thao tác ghi dữ liệu cơ bản. Cảm biến DHT được làm bằng hai phần, một cảm biến độ ẩm điện dung và một điện trở nhiệt. Ngoài ra còn có một con chip rất cơ bản bên trong thực hiện một số chuyển đổi tương tự sang kỹ thuật số và phát ra tín hiệu kỹ thuật số với nhiệt độ và độ ẩm. Tín hiệu kỹ thuật số khá dễ đọc bằng cách sử dụng bất kỳ bộ vi điều khiển nào.

DHT22 Đặc điểm chính:

  • Giá thấp
  • Nguồn 3 đến 5V và I / O
  • Sử dụng dòng điện tối đa 2,5mA trong quá trình chuyển đổi (trong khi yêu cầu dữ liệu)
  • Tốt cho các bài đọc độ ẩm 0-100% với độ chính xác 2-5%
  • Tốt cho các bài đọc nhiệt độ -40 đến 125 ° C ± 0,5 ° C
  • Tốc độ lấy mẫu không quá 0,5 Hz (2 giây một lần)
  • Kích thước cơ thể 15,1mm x 25mm x 7,7mm
  • 4 chân với khoảng cách 0,1"

Thông thường, bạn sẽ sử dụng cảm biến ở khoảng cách nhỏ hơn 20m, một điện trở 4K7 ohm phải được kết nối giữa các chân Data và VCC. Chân dữ liệu đầu ra DHT22 sẽ được kết nối với Raspberry GPIO 16. Kiểm tra sơ đồ điện trên, kết nối cảm biến với chân RPi như bên dưới:

  1. Chân 1 - Vcc ==> 3.3V
  2. Chân 2 - Dữ liệu ==> GPIO 16
  3. Pin 3 - Không kết nối
  4. Chân 4 - Gnd ==> Gnd

Đừng quên lắp điện trở 4K7 ohm giữa chân Vcc và chân Data

Khi cảm biến được kết nối, chúng tôi cũng phải cài đặt thư viện của nó trên RPi của chúng tôi.

Cài đặt Thư viện DHT:

Trên Raspberry của bạn, bắt đầu từ / home, hãy truy cập / Documents

Tài liệu cd

Tạo một thư mục để cài đặt thư viện và chuyển đến đó:

mkdir DHT22_Sensor

cd DHT22_Sensor

Trên trình duyệt của bạn, truy cập Adafruit GitHub:

github.com/adafruit/Adafruit_Python_DHT

Tải xuống thư viện bằng cách nhấp vào liên kết zip tải xuống ở bên phải và giải nén tệp lưu trữ trên thư mục Raspberry Pi được tạo gần đây của bạn. Sau đó đi đến thư mục của thư viện (thư mục con được tạo tự động khi bạn giải nén tệp) và thực hiện lệnh:

sudo python3 setup.py cài đặt

Mở chương trình thử nghiệm (DHT22_test.py) từ GITHUB của tôi

nhập Adafruit_DHT

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 độ ẩm, nhiệt độ = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin) nếu độ ẩm không phải Không có và nhiệt độ không là Không có: print ('Nhiệt độ = {0: 0,1f} * C Humidity = {1: 0,1 f}% '. format (nhiệt độ, độ ẩm)) else: print (' Không đọc được. Hãy thử lại! ')

Thực thi chương trình bằng lệnh:

python3 DHT22_test.py

Màn hình in Terminal bên dưới hiển thị kết quả.

Hình ảnh
Hình ảnh

Bước 3: Cài đặt DS18B20 - Cảm biến nhiệt độ

Cài đặt DS18B20 - Cảm biến nhiệt độ
Cài đặt DS18B20 - Cảm biến nhiệt độ
Cài đặt DS18B20 - Cảm biến nhiệt độ
Cài đặt DS18B20 - Cảm biến nhiệt độ

Tổng quan về cảm biến:

Trong hướng dẫn này, chúng tôi sẽ sử dụng phiên bản không thấm nước của cảm biến DS18B20. Nó rất hữu ích cho nhiệt độ từ xa trong điều kiện ẩm ướt, ví dụ như trên đất ẩm. Cảm biến được cách ly và có thể thực hiện các phép đo cho đến 125oC (Adafrut không khuyến nghị sử dụng cảm biến trên 100oC do vỏ bọc PVC của cáp).

DS18B20 là một cảm biến kỹ thuật số giúp nó sử dụng tốt ngay cả trong khoảng cách xa! Các cảm biến nhiệt độ kỹ thuật số 1 dây này khá chính xác (± 0,5 ° C trong nhiều phạm vi) và có thể cung cấp độ chính xác lên đến 12 bit từ bộ chuyển đổi kỹ thuật số sang tương tự trên bo mạch. Chúng hoạt động hiệu quả với NodeMCU bằng cách sử dụng một chân kỹ thuật số duy nhất và bạn thậm chí có thể kết nối nhiều chân với cùng một chân, mỗi chân có một ID 64-bit duy nhất được đốt tại nhà máy để phân biệt chúng.

Cảm biến hoạt động từ 3.0 đến 5.0V, có nghĩa là nó có thể được cấp nguồn trực tiếp từ 3.3V được cung cấp bởi một trong các chân Raspberry (1 hoặc 17).

Cảm biến có 3 dây:

  • Đen: GND
  • Đỏ: VCC
  • Màu vàng: Dữ liệu 1 dây

Tại đây, bạn có thể tìm thấy toàn bộ dữ liệu: DS18B20 Datasheet

Cài đặt cảm biến:

Thực hiện theo sơ đồ trên và thực hiện các kết nối:

  • Vcc ==> 3,3V
  • Gnd ==> Gnd
  • Dữ liệu ==> GPIO 4 (mặc định cho thư viện)

Cài đặt Thư viện Python:

Tiếp theo, hãy cài đặt thư viện Python sẽ xử lý cảm biến:

sudo pip3 cài đặt w1thermsensor

Trước khi chạy tập lệnh để kiểm tra cảm biến, hãy kiểm tra xem giao diện "1-Wire" có được bật trong RPi của bạn hay không (xem màn hình in ở trên)

Đừng quên khởi động lại RPi của bạn, sau khi thay đổi cấu hình của nó

Kiểm tra cảm biến:

Để kiểm tra cảm biến, một tập lệnh python đơn giản có thể được sử dụng:

thời gian nhập khẩu

từ w1thermsensor nhập W1ThermSensor ds18b20Sensor = W1ThermSensor () trong khi True: nhiệt độ = ds18b20Sensor.get_tempeosystem () print ("Nhiệt độ là% s c độ"% nhiệt độ) time.sleep (1)

Bước 4: Cài đặt BMP180

Cài đặt BMP180
Cài đặt BMP180
Cài đặt BMP180
Cài đặt BMP180
Cài đặt BMP180
Cài đặt BMP180

Tổng quan về cảm biến:

BMP180 là sự kế thừa của BMP085, một thế hệ cảm biến áp suất kỹ thuật số chính xác cao mới dành cho các ứng dụng tiêu dùng. Công suất cực thấp, thiết bị điện tử điện áp thấp của BMP180 được tối ưu hóa để sử dụng trong điện thoại di động, PDA, thiết bị định vị GPS và thiết bị ngoài trời. Với độ ồn ở độ cao thấp chỉ 0,25m ở thời gian chuyển đổi nhanh, BMP180 mang lại hiệu suất vượt trội. Giao diện I2C cho phép tích hợp hệ thống dễ dàng với vi điều khiển. BMP180 dựa trên công nghệ điện trở áp cho độ bền của EMC, độ chính xác cao và tuyến tính cũng như độ ổn định lâu dài.

Bảng dữ liệu BMP đầy đủ có thể được tìm thấy tại đây: BMP180 - Cảm biến áp suất kỹ thuật số

Cài đặt cảm biến: Thực hiện theo sơ đồ trên và thực hiện các kết nối:

  • Vin ==> 3,3V
  • GND ==> GND
  • SCL ==> GPIO 3
  • SDA ==> GPIO 2

Bật giao diện I2C

Đi tới Cấu hình RPi và xác nhận rằng giao diện I2C đã được bật. Nếu không, hãy kích hoạt nó và khởi động lại RPi.

Sử dụng BMP180

Nếu mọi thứ đã được cài đặt ổn và mọi thứ đã được kết nối ổn, bây giờ bạn đã sẵn sàng bật Pi của mình và bắt đầu xem BMP180 đang nói gì với bạn về thế giới xung quanh bạn.

Điều đầu tiên cần làm là kiểm tra xem Pi có nhìn thấy BMP180 của bạn hay không. Hãy thử những điều sau trong cửa sổ dòng lệnh:

sudo i2cdetect -y 1

Nếu lệnh hoạt động, bạn sẽ thấy một cái gì đó tương tự như Màn hình in đầu cuối ở trên, cho thấy rằng BMP180 đang ở trên kênh '77'.

Cài đặt Thư viện BMP180:

Tạo thư mục để cài đặt thư viện:

mkdir BMP180_Sensorcd BMP180_Sensor

Trên trình duyệt của bạn, truy cập Adafruit GITHub:

github.com/adafruit/Adafruit_Python_BMP

Tải xuống thư viện bằng cách nhấp vào liên kết zip tải xuống ở bên phải và giải nén tệp lưu trữ trên thư mục đã tạo Raspberry Pi của bạn. Sau đó đi đến thư mục con đã tạo và thực hiện lệnh sau trong thư mục của thư viện:

sudo python3 setup.py cài đặt

Mở IDE Python của bạn và tạo một chương trình thử nghiệm và đặt tên cho nó, ví dụ BMP180Test.py

nhập Adafruit_BMP. BMP085 dưới dạng BMP085sensor = BMP085. BMP085 () print ('Temp = {0: 0.2f} * C'.format (sensor.read_tempether ())) print (' Pressure = {0: 0.2f} Pa '). format (sensor.read_pressure ())) print ('Altitude = {0: 0.2f} m'.format (sensor.read_altitude ())) print (' Sealevel Pressure = {0: 0.2f} Pa'.format (sensor.read_sealevel_pressure ()))

Thực hiện chương trình thử nghiệm:

python3 BMP180Test.py

Màn hình in Terminal ở trên hiển thị kết quả.

Lưu ý rằng áp suất đó được trình bày bằng Pa (Pascals). Xem bước tiếp theo để hiểu rõ hơn về đơn vị này.

Bước 5: Đo thời tiết và độ cao với BMP180

Đo thời tiết và độ cao với BMP180
Đo thời tiết và độ cao với BMP180

Hãy dành một chút thời gian để hiểu thêm một chút về những gì chúng ta sẽ nhận được, với các bài đọc BMP. Bạn có thể bỏ qua phần này của hướng dẫn hoặc quay lại sau.

Nếu bạn muốn biết thêm về các bài đọc của Cảm biến, vui lòng truy cập hướng dẫn tuyệt vời này:

BMP180 được thiết kế để đo chính xác áp suất khí quyển. Áp suất khí quyển thay đổi theo cả thời tiết và độ cao.

Áp suất khí quyển là gì?

Định nghĩa về áp suất khí quyển là một lực mà không khí xung quanh bạn tác dụng lên mọi vật. Trọng lượng của các khí trong khí quyển tạo ra áp suất khí quyển. Một đơn vị áp suất phổ biến là "pound trên inch vuông" hoặc psi. Ở đây chúng tôi sẽ sử dụng ký hiệu quốc tế, đó là newton trên mét vuông, được gọi là pascal (Pa).

Nếu bạn lấy rộng 1 cm cột không khí sẽ nặng khoảng 1 kg

Trọng lượng này, đè lên dấu chân của cột đó, tạo ra áp suất khí quyển mà chúng ta có thể đo bằng các cảm biến như BMP180. Vì cột không khí rộng cm đó nặng khoảng 1Kg, nên áp suất mực nước biển trung bình là khoảng 101325 pascal, hoặc tốt hơn, 1013,25 hPa (1 hPa còn được gọi là milibar - mbar). Điều này sẽ giảm khoảng 4% cho mỗi 300 mét bạn đi lên. Càng lên cao, bạn sẽ càng thấy ít áp suất hơn, vì cột lên đỉnh của khí quyển ngắn hơn nhiều và do đó nặng hơn. Điều này rất hữu ích để biết, bởi vì bằng cách đo áp suất và làm một số phép toán, bạn có thể xác định độ cao của mình.

Áp suất không khí ở độ cao 3,810 mét chỉ bằng một nửa so với mực nước biển.

BMP180 xuất ra áp suất tuyệt đối tính bằng pascal (Pa). Một pascal là một lượng áp lực rất nhỏ, xấp xỉ lượng mà một tờ giấy sẽ tác động lên bàn. Bạn sẽ thường xuyên thấy các phép đo bằng hectopascal (1 hPa = 100 Pa). Thư viện được sử dụng ở đây cung cấp đầu ra giá trị dấu phẩy động trong hPa, giá trị này cũng bằng một milibar (mbar).

Dưới đây là một số chuyển đổi sang các đơn vị áp suất khác:

  • 1 hPa = 100 Pa = 1 mbar = 0,001 bar
  • 1 hPa = 0,75006168 Torr
  • 1 hPa = 0,01450377 psi (pound trên inch vuông)
  • 1 hPa = 0,02953337 inHg (inch thủy ngân)
  • 1 hpa = 0,00098692 atm (khí quyển tiêu chuẩn)

Hiệu ứng nhiệt độ

Bởi vì nhiệt độ ảnh hưởng đến mật độ của một chất khí, và mật độ ảnh hưởng đến khối lượng của một chất khí, và khối lượng ảnh hưởng đến áp suất (whew), áp suất khí quyển sẽ thay đổi đáng kể theo nhiệt độ. Phi công biết điều này là "độ cao mật độ", giúp dễ dàng cất cánh vào ngày lạnh hơn là trời nóng vì không khí dày đặc hơn và có hiệu ứng khí động học lớn hơn. Để bù đắp cho nhiệt độ, BMP180 bao gồm một cảm biến nhiệt độ cũng như một cảm biến áp suất khá tốt.

Để thực hiện phép đo áp suất, trước tiên bạn đo nhiệt độ, sau đó kết hợp với số đọc áp suất thô để đưa ra phép đo áp suất bù nhiệt độ cuối cùng. (Thư viện thực hiện tất cả những điều này rất dễ dàng.)

Đo áp suất tuyệt đối

Nếu ứng dụng của bạn yêu cầu đo áp suất tuyệt đối, tất cả những gì bạn phải làm là đọc nhiệt độ, sau đó thực hiện đọc áp suất (xem bản phác thảo ví dụ để biết chi tiết). Giá trị áp suất cuối cùng sẽ được tính bằng hPa = mbar. Nếu muốn, bạn có thể chuyển đổi đơn vị này sang một đơn vị khác bằng cách sử dụng các yếu tố chuyển đổi ở trên.

Lưu ý rằng áp suất tuyệt đối của khí quyển sẽ thay đổi theo cả độ cao của bạn và kiểu thời tiết hiện tại, cả hai đều là những thứ hữu ích để đo.

Quan sát thời tiết

Áp suất khí quyển tại bất kỳ vị trí nhất định nào trên trái đất (hoặc bất kỳ nơi nào có khí quyển) là không đổi. Sự tương tác phức tạp giữa chuyển động quay của trái đất, độ nghiêng trục và nhiều yếu tố khác dẫn đến việc chuyển động các khu vực có áp suất cao hơn và thấp hơn, từ đó gây ra sự thay đổi thời tiết mà chúng ta thấy hàng ngày. Bằng cách theo dõi những thay đổi của áp suất, bạn có thể dự đoán những thay đổi ngắn hạn của thời tiết. Ví dụ, áp suất giảm thường có nghĩa là thời tiết ẩm ướt hoặc một cơn bão đang đến gần (một hệ thống áp suất thấp đang di chuyển đến). Áp suất tăng thường có nghĩa là thời tiết trong lành đang đến gần (một hệ thống áp suất cao đang di chuyển qua). Nhưng hãy nhớ rằng áp suất khí quyển cũng thay đổi theo độ cao. Áp suất tuyệt đối trong nhà tôi, Lo Barnechea ở Chile (độ cao 950m) sẽ luôn thấp hơn áp suất tuyệt đối ở San Francisco chẳng hạn (dưới 2 mét, gần như mực nước biển). Nếu các trạm thời tiết chỉ báo cáo áp suất tuyệt đối của chúng, sẽ rất khó để so sánh trực tiếp các phép đo áp suất từ vị trí này sang vị trí khác (và các dự đoán thời tiết quy mô lớn phụ thuộc vào các phép đo từ càng nhiều trạm càng tốt).

Để giải quyết vấn đề này, các trạm thời tiết luôn loại bỏ ảnh hưởng của độ cao khỏi các kết quả đo áp suất được báo cáo của họ bằng cách cộng theo toán học áp suất cố định tương đương để làm cho nó xuất hiện như thể kết quả đo được ở mực nước biển. Khi bạn làm điều này, chỉ số đọc ở San Francisco cao hơn Lo Barnechea sẽ luôn là do các kiểu thời tiết chứ không phải do độ cao.

Để làm điều này, có một hàm trong thư viện được gọi là mực nước biển (P, A). Điều này lấy áp suất tuyệt đối (P) tính bằng hPa và độ cao hiện tại của trạm (A) tính bằng mét và loại bỏ ảnh hưởng của độ cao khỏi áp suất. Bạn có thể sử dụng đầu ra của chức năng này để so sánh trực tiếp kết quả thời tiết của mình với các đài khác trên thế giới.

Xác định độ cao

Vì áp suất thay đổi theo độ cao, bạn có thể sử dụng cảm biến áp suất để đo độ cao (với một số lưu ý). Áp suất trung bình của khí quyển ở mực nước biển là 1013,25 hPa (hay mbar). Điều này giảm xuống 0 khi bạn leo về phía chân không của không gian. Bởi vì đường cong của sự sụt giảm này đã được hiểu rõ, bạn có thể tính toán chênh lệch độ cao giữa hai phép đo áp suất (p và p0) bằng cách sử dụng một phương trình cụ thể.

Nếu bạn sử dụng áp suất mực nước biển (1013,25 hPa) làm áp suất cơ bản (p0), đầu ra của phương trình sẽ là độ cao hiện tại của bạn trên mực nước biển. Có một chức năng trong thư viện được gọi là độ cao (P, P0) cho phép bạn lấy "độ cao được tính toán".

Giải thích trên được trích xuất từ hướng dẫn BMP 180 Sparkfun.

Bước 6: Toàn bộ CTNH

Toàn bộ CTNH
Toàn bộ CTNH

Bước 7: Gửi dữ liệu đến ThingSpeak

Gửi dữ liệu đến ThingSpeak
Gửi dữ liệu đến ThingSpeak

Tại thời điểm này, chúng tôi đã học cách chuẩn bị RPi để thu thập dữ liệu từ cả 3 cảm biến, in chúng trên thiết bị đầu cuối. Bây giờ, đã đến lúc xem cách gửi những dữ liệu đó ra nền tảng IoT, ThingSpeak.

Hãy bắt đầu nào!

Đầu tiên, bạn phải có một tài khoản tại ThinkSpeak.com

Làm theo hướng dẫn để tạo Kênh và ghi lại ID kênh của bạn và Viết khóa API

Tải xuống Tập lệnh Python từ GitHub của tôi: localData ToTS_v1_EXT.py

Hãy bình luận đoạn mã quan trọng nhất:

Đầu tiên, hãy nhập thư viện ThingSpeak, xác định ứng dụng khách WiFi và xác định thông tin đăng nhập Bộ định tuyến và Thinkspeak cục bộ của bạn:

nhập khẩu điều

Có một số cách để giao tiếp với ThingSpeak, cách đơn giản nhất là sử dụng thư viện máy khách cho API thingspeak.com do Mikolaj Chwaliz và Keith Ellis phát triển.

Thư viện có thể được tải xuống từ https://github.com/mchwalisz/thingspeak hoặc sử dụng PIP trên thiết bị đầu cuối:

sudo pip3 cài đặt thingspeak

Tiếp theo, bên trong tập lệnh, cập nhật thông tin đăng nhập kênh ThingSpeak

chId = 9999999 # Nhập với Id kênh của bạn

tsKey = 'NHẬP KHÓA VIẾT KÊNH CỦA BẠN' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)

Bây giờ, hãy Khởi tạo 3 cảm biến:

# Thư viện 1 dây DS18B20

từ w1thermsensor nhập W1ThermSensor ds18b20Sensor = W1ThermSensor () # Theo mặc định, GPIO 4 được sử dụng bởi thư viện # DHT22 Thư viện nhập Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 thư viện nhập Adafruit_BMP. BMP085 dưới dạng BMPBMP085 như BMP085BMP085 nhập vào BMP180BMP085. Bạn nên xác định độ cao thực tại nơi đặt Trạm thời tiết của mình, cập nhật biến Global "altReal". Trong trường hợp của tôi, Trạm của tôi nằm ở độ cao 950m so với mực nước biển

altReal toàn cầu

altReal = 950

Sau khi nhập với độ cao thực của trạm làm đầu vào, chúng ta có thể nhận được áp suất tuyệt đối, áp suất mực nước biển, nhiệt độ và độ cao bằng cách sử dụng hàm bmp180GetData (độ cao):

def bmp180GetData (độ cao):

temp = bmp180Sensor.read_tempeosystem () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres / pow (1.0 - height / 44330.0, 5.255) temp = round (temp, 1) pres = round (pres / 100, 2) # áp suất tuyệt đối tính bằng hPa (hoặc mbar) alt=round (alt) presSeaLevel = round (presSeaLevel / 100, 2) # áp suất tuyệt đối tính bằng hPa (hoặc mbar) trả về nhiệt độ, pres, alt, presSeaLevel

Hàm getLocalData (), sẽ trả về tất cả dữ liệu cục bộ được trạm của chúng tôi ghi lại:

def getLocalData ():

global timeString global humLab global tempExt global tempLab global presSL global altLab global presAbs # Nhận thời gian đọc ngay = datetime.datetime.now () timeString = now.strftime ("% Y-% m-% d% H:% M") # Đọc Nhiệt độ bên ngoài (khoảng cách 1 mét) tempExt = round (ds18b20Sensor.get_tempether (), 1) tempLab, presAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin không có) nếu humDHT không có và tempDHT không phải là Không có: humLab = round (humDHT

Khi bạn đã thu thập tất cả dữ liệu bằng các chức năng trên, bạn phải gửi chúng đến ThingSpeak. Bạn sẽ làm điều đó bằng cách sử dụng hàm sendDataTs ():

def sendDataTs ():

data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] Dữ liệu được gửi cho 5 trường: ", tempLab, tempExt, humLab, presSL, altLab)

Khi dữ liệu kênh của bạn được cập nhật, hãy lưu tập lệnh và thực thi nó trên thiết bị đầu cuối của bạn:

sudo Python3 localData_ToTs_v1_EXT.py

Giới thiệu về các giao thức truyền thông

Lưu ý rằng sử dụng "thư viện thingspeak", "thư viện yêu cầu" được nhập, đó là thư viện HTTP được cấp phép của Apache2, được viết bằng Python. Tài liệu cài đặt Yêu cầu chính thức có thể được tìm thấy tại đây:

docs.python-requests.org/en/latest/user/install/

Nếu cần, trước khi chạy tập lệnh của mình, bạn có thể xác minh xem thư viện yêu cầu đã được cài đặt chưa:

yêu cầu cài đặt sudo pip3

Theo tùy chọn, bạn có thể sử dụng MTTQ như một phương thức để gửi dữ liệu đến ThingSpeak. MQTT khác với HTTP, một khi Nó được thiết kế đặc biệt để có trọng lượng nhẹ và dành cho các thiết bị nhúng có RAM và hiệu suất CPU thấp. Ngoài ra, trong hầu hết các trường hợp, MQTT sử dụng ít băng thông hơn.

Tham khảo hướng dẫn này: Cập nhật Kênh ThingSpeak bằng MQTT trên Raspberry Pi để biết thêm chi tiết.

Bước 8: Gửi dữ liệu từ xa tới ThingSpeak bằng ESP8266

Gửi dữ liệu từ xa tới ThingSpeak bằng ESP8266
Gửi dữ liệu từ xa tới ThingSpeak bằng ESP8266
Gửi dữ liệu từ xa tới ThingSpeak bằng ESP8266
Gửi dữ liệu từ xa tới ThingSpeak bằng ESP8266

Đối với bước này, chúng tôi sẽ sử dụng cùng một HW đã được giải thích trong hướng dẫn muy:

CÓ THỂ DỄ DÀNG HƠN: PHÁT HIỆN DỮ LIỆU THỜI TIẾT TỪ XA: NHIỆT ĐỘ & ĐỘ ẨM CỦA UV VÀ KHÔNG KHÍ

Mã mà chúng ta sẽ sử dụng ở đây, về cơ bản giống được sử dụng trong hướng dẫn đó. Hãy bình luận đoạn mã quan trọng nhất:

Đầu tiên, hãy gọi thư viện ESP8266, xác định máy khách WiFi và xác định thông tin đăng nhập Bộ định tuyến và Thinkspeak cục bộ của bạn:

/ * NodeMCU ESP12-E * /

# bao gồm ứng dụng khách WiFiClient; const char * MY_SSID = "NHẬP BẰNG SSDID CỦA BẠN"; const char * MY_PWD = "NHẬP MẬT KHẨU CỦA BẠN"; / * Thinkspeak * / const char * TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "NHẬP BẰNG KHÓA VIẾT CỦA BẠN";

Thứ hai, hãy bao gồm một thư viện rất quan trọng cho các dự án IoT: SimpleTimer.h:

/ * HẸN GIỜ * /

# bao gồm bộ hẹn giờ SimpleTimer;

Thứ ba, trong quá trình setup (), chúng ta sẽ bắt đầu giao tiếp nối tiếp, gọi hàm connectWiFi () và xác định bộ định thời. Lưu ý rằng dòng mã: timer.setInterval (60000L, sendDataTS); sẽ gọi hàm sendDataTS () sau mỗi 60 giây, để tải dữ liệu lên kênh ThinkSpeak.

void setup ()

{… Serial.begin (115200); chậm trễ (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}

Cuối cùng nhưng không kém phần quan trọng, trong vòng lặp (), lệnh duy nhất cần thiết là khởi chạy bộ đếm thời gian và thế là xong!

void loop ()

{… Timer.run (); // Khởi tạo SimpleTimer}

Dưới đây, bạn có thể thấy hai chức năng quan trọng được sử dụng để xử lý giao tiếp Thinkspeak:

Kết nối ESP12-E với mạng WiFi của bạn:

/***************************************************

* Kết nối WiFi *********************************************** *** / void connectWifi () {Serial.print ("Đang kết nối với" + * MY_SSID); WiFi.begin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {delay (1000); Serial.print ("."); } Serial.println (""); Serial.println ("Đã kết nối WiFi"); Serial.println (""); }

ESP12-E gửi dữ liệu đến ThinkSpeak:

***************************************************

* Gửi dữ liệu đến kênh Thinkspeak ******************************************** ****** / void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr + = "& field6 ="; postStr + = String (tạm thời); postStr + = "& field7 ="; postStr + = String (hum); postStr + = "& field8 ="; postStr + = String (dataSensorUV); postStr + = "\ r / n / r / n"; client.print ("ĐĂNG / cập nhật HTTP / 1.1 / n"); client.print ("Máy chủ: api.thingspeak.com / n"); client.print ("Kết nối: close / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Loại-Nội dung: application / x-www-form-urlencoded / n"); client.print ("Nội dung-Độ dài:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); chậm trễ (1000); } đã gửi ++; client.stop (); }

Có thể tìm thấy mã hoàn chỉnh trên GitHub của tôi: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Khi bạn đã tải mã lên NodeMCU của mình. Hãy kết nối pin bên ngoài và thực hiện một số phép đo dưới ánh nắng mặt trời. Tôi đặt Trạm điều khiển từ xa trên mái nhà và bắt đầu thu thập dữ liệu trên ThingSpeak.com như trong các bức ảnh trên.

Bước 9: Ghi chú cuối cùng

Ghi chú cuối cùng
Ghi chú cuối cùng

Mục đích chính của hướng dẫn này là chỉ ra cách kết nối Raspberry Pi với ThingSpeak. Điều này thật tuyệt vời để thu thập dữ liệu và đăng nhập chúng trên nền tảng IoT.

Tận dụng cơ hội, chúng tôi cũng gửi dữ liệu đến kênh cụ thể đó, thu thập dữ liệu từ một trạm từ xa bằng cách sử dụng ESP8266. Đây là cách tiếp cận là OK, nhưng không phải là cách tốt nhất. Bởi vì chúng tôi có một hoạt động "không đồng bộ", đôi khi, cả RPi và ESP8266 cố gắng ghi nhật ký cùng một lúc (hoặc với một khoảng thời gian nhỏ) những gì bị từ chối bởi ThingSpeak. Lý tưởng nhất sẽ là ESP8266 gửi dữ liệu cục bộ đến Raspberry Pi và là thiết bị cuối cùng chịu trách nhiệm xử lý tất cả dữ liệu. Làm điều đó, "Trạm chính" (Raspberry Pi), có thể làm được 3 việc:

  • Ghi tất cả dữ liệu trên cơ sở dữ liệu cục bộ
  • Trình bày tất cả dữ liệu trên một Trang Web cục bộ (sử dụng Flask như trong ảnh trên)
  • Gửi tất cả dữ liệu đến ThingSpeak cùng một lúc.

Trong một hướng dẫn trong tương lai, chúng ta sẽ khám phá các tùy chọn đó.

Bước 10: Kết luận

Phần kết luận
Phần kết luận

Như mọi khi, tôi hy vọng dự án này có thể giúp những người khác tìm đường vào thế giới điện tử đầy thú vị!

Để biết chi tiết và mã cuối cùng, vui lòng truy cập kho lưu ký GitHub của tôi: RPi-NodeMCU-Weather-Station

Để biết thêm các dự án khác, vui lòng truy cập blog của tôi: MJRoBot.org

Giữ nguyên! Hướng dẫn tiếp theo, chúng tôi sẽ gửi dữ liệu từ một trạm thời tiết từ xa đến một trạm trung tâm, dựa trên máy chủ Web Raspberry Pi:

Hình ảnh
Hình ảnh

Saludos từ phía nam của thế giới!

Hẹn gặp bạn trong hướng dẫn tiếp theo của tôi!

Cảm ơn bạn, Marcelo

Đề xuất: