آموزش رزبری پایآموزش رزبری پای پیکو Picoپروژه رزبری پای

وب سرور مانیتورینگ دما و رطوبت با رزبری پای پیکو

در این مطلب، می آموزیم که چگونه با استفاده از میکروکنترلر رزبری پای پیکو و یک سنسور دما و رطوبت DHT11 یک وب سرور real-time بسازیم. با ترکیب قدرت و توانایی های میکروکنترلر رزبری پای پیکو و توانایی سنسور DHT11 در اندازه گیری دما و رطوبت، میتوانیم یک سیستم موثر و در عین حال ساده، برای مانیتورینگ شرایط محیطی بسازیم. در این پروژه، با هم مراحل راه اندازی سخت افزار، نوشتن کد و ایجاد یک وب سرور که داده دما و رطوبت را به صورت real-time نشان میدهد، طی خواهیم کرد. حال بیایید با قطعات استفاده شده در این پروژه آشنا شویم.

سنسور دما و رطوبت DHT11

سنسور DHT11 یک سنسور دیجیتال معروف و ارزان قیمت برای اندازه گیری دما و رطوبت است. این سنسور به طور گسترده در پروژه ها و مصارف مختلفی که به مانیتورینگ یا کنترل سطح رطوبت و دما در یک محیط نیاز دارند، استفاده میشود. این سنسور داده های دقیق و قابل اعتمادی را دراختیار ما میگذارد درنتیجه هم برای سرگرمی و هم در پروژه های حرفه ای قابل استفاده است.

شرح پایه یا پین اوت ماژول DHT11

  • VCC: این پایه برای تغذیه سنسور استفاده میشود. این پایه معمولا به یک منبع تغذیه 5 ولتی متصل میشود.
  • Data: این پایه به منظور ارتباطات دوطرفه بین سنسور و میکروکنترلر استفاده میشود. این پایه برای انتقال داده، یک رابط سریال تک سیمه را به کار میبرد.
  • GND: پایه GND به زمین یا ولتاژ 0V منبع تغذیه متصل میشود.

اجزا ماژول DHT11

اجزا ماژول DHT11

در ماژول DHT11 قطعات بسیار کمی وجود دارند. این اجزا شامل تراشه DHT11، یک مقاومت پول آپ که از این زاویه قابل رویت نیست و یک LED نشانگر تغذیه هستند.

پیشتر روی پروژه های “ایستگاه هواشناسی با رزبری پای مبتنی بر اینترنت اشیا” و “وب سرور با NodeMCU مبتنی بر اینترنت اشیا” کار کرده ایم.

مدار ماژول DHT11

DHT11 شامل یک مقاومت پول آپ است که به پایه Data اضافه شده است. همچنین در آن یک تک LED به همراه یک مقاومت محدودکننده جریان 1 کیلواهمی و یک خازن برای فیلتر سیگنال های دریافتی از تراشه DHT11، استفاده شده است.

مدار ماژول DHT11

عملکرد سنسور دما و رطوبت DHT11

سنسور DHT11 با استفاده از سنسور خازنی و سنسور دمایی  که مبتنی بر ترمیستور است، کار میکند. میکروکنترلر با ارسال یک سیگنال شروع به ماژول سنسور، فرآیند اندازه گیری را آغاز میکند. ماژول به این سیگنال پاسخ داده و یک جریان داده متشکل از 40 بیت را به میکروکنترلر ارسال میکند. این داده ها، داده های دما و رطوبت خوانده شده توسط سنسور هستند. میکروکنترلر برای اعتبارسنجی یکپارچه بودن داده ها، جمع آزما یا checksum را محاسبه کرده، داده دریافتی را تفسیر میکند و در ادامه آن را به مقادیر با معنی دما و رطوبت تبدیل میکند. ماژول سنسور DHT11 با تولید یک خروجی دیجیتال، نیاز به وجود یک مبدل آنالوگ و دیجیتال و در ادامه تبدیل داده آنالوگ به دیجیتال را از بین میبرد. به علاوه این سنسور با از بین بردن پیچیدگی های پروتکل ارتباطی، باعث سهولت عملیات میشود. تمام این ویژگی ها سبب میشود که کار با این سنسور در اندازه گیری رطوبت و دما بسیار آسان باشد.

راه اندازی سخت افزار برای مانیتورینگ دما و رطوبت

قطعات موردنیاز این پروژه در لیست زیر آورده شده اند:

  • رزبری پای پیکو W
  • کابل USB
  • سنسور دما و رطوبت DHT11
  • مینی بردبورد
  • سیم های جامپر
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

مدار اتصال سنسور DHT11 و Pico W

مدار اتصال سنسور DHT11 و Pico W

برای اتصال سنسور DHT11 به رزبری پای پیکو نیاز به برقراری چند اتصال ضروری دارید. در ابتدا پایه VCC (تغذیه) سنسور DHT11 را به پایه خروجی 3V3 رزبری پای پیکو متصل کنید. این اتصالات، تغذیه مورد نیاز سنسور را فراهم میکند.

سپس، پایه های GND (زمین) سنسور DHT11 را به پایه زمین (GND) رزبری پای پیکو متصل کنید. این اتصال نیز با ایجاد یک زمین مشترک بین سنسور و میکروکنترلر، انتقال صحیح سیگنال را تضمین میکند.

درنهایت، پایه داده سنسور DHT11 را به پایه 16 رزبری پای پیکو متصل کنید. این پایه برای ارتباط با سنسور و دریافت داده دما و رطوبت استفاده میشود. در واقع این پایه، رابط بین سنسور و میکروکنترلر است.

سوالات متداول درباره سنسور DHT11

1-چگونه خطاها یا ناهماهنگی های موجود در داده های DHT11 را مدیریت کنیم؟

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

سنسور DHT11 گاهی ممکن است داده های نادرست و یا ناهماهنگی را دراختیار ما بگذارد. برای افزایش دقت داده های این سنسور، میتوانید تکنیک های بررسی خطا و میانگین گیری را پیاده سازی کنید. برای مثال چندین داده سنسور را درنظر گرفته و از آن ها میانگین بگیرید و یا مقادیر خوانده شده را با مقادیر آستانه از پیش تعریف شده مقایسه کنید تا به این شکل، مقادیر غیرعادی شناسایی شوند.

2-سنسور DHT11 با چه فرکانسی داده دما و رطوبت را دراختیار ما میگذارد؟

سنسور DHT11 دارای نرخ تجدید محدودی است. نرخ تجدید آن در حدود 1 هرتز است. یعنی شما میتوانید هر یک ثانیه یکبار، منتظر داده جدیدی از سنسور باشید. خواندن داده با فرکانس بالاتر، دقت سنسور را پایین آورده و ممکن است باعث تولید داده های نادرست شود.

3-آیا میتوان از سنسور DHT11 در فضای بیرون استفاده کرد؟

سنسور DHT11 برای استفاده در فضای بیرون و یا قرارگرفتن در محیط های سخت و خشن طراحی نشده است. ما به شما پیشنهاد میکنیم که از این سنسور در کاربردهای خانگی استفاده کنید تا از رطوبت و دماهای بسیار بالا یا بسیار پایین در امان بماند.

پیکربندی نرم افزار برای اتصال سنسور DHT11 و Pico W

در ابتدا شما باید فایل dht.py را دانلود کرده و آن را در Thonny IDE باز کنید.

حال از منو File، گزینه Save as  را انتخاب کنید.

هنگامی که این پنجره در صفحه شما نمایش داده شده، بر گزینه Raspberry Pi Pico کلیک کرده و فایل را با نام dht.py ذخیره کنید.

پیکربندی نرم افزار برای اتصال سنسور DHT11 و Pico W

فایل سیستم باید مانند تصویر زیر به نظر برسد. فایل main.py، فایل وب سروری است که شما باید آن را مطابق مراحل بالا، ذخیره کنید. حال به سراغ  توضیحات کد میرویم.

در ابتدا SSID و رمزعبور خود را در کد وارد کنید.

wlan.connect("SSID", "password")

وب سرور برای نمایش داده های dht11، باید به هات اسپات تلفن همراه شما متصل شود و برای این امر، شما باید SSID و رمز عبور خود را در کد وارد کنید.

حال بیایید کد را به طور کامل و مرحله به مرحله توضیح دهیم.

from machine import Pin
import socket
import math
import utime
import network
import time
import json
from dht import DHT11, InvalidChecksum

قطعه کد بالا، ماژول ها و کتابخانه های ضروری این برنامه را فراخوانی میکند.

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("SSID", "password")

این قطعه کد، شبکه وایفای را تنظیم و راه اندازی کرده و سپس با SSID ( که Realme است) و رمز عبور (که onetwoeight است) به شبکه متصل میشود.

dhtPIN = 16
sensor = DHT11(Pin(dhtPIN, Pin.OUT, Pin.PULL_UP))

در این قسمت، پایه 16 میکروکنترلر را به عنوان پایه GPIO متصل به سنسور DHT11 پیکربندی میکنیم. همچنین یک نمونه از کلاس DHT11 به نام sensor ایجاد کرده و پایه متصل به سنسور را به عنوان یکی از آرگومان های این نمونه، به آن میدهیم.

wait = 10
while wait > 0:
    if wlan.status() < 0 or wlan.status() >= 3:
        break
    wait -= 1
    print('waiting for connection...')
    time.sleep(1)

این حلقه تا برقراری ارتباط وایفای منتظر میماند. حلقه، وضعیت ارتباط وایفای را بررسی کرده و حداکثر تا 10 ثانیه صبر میکند.

if wlan.status() != 3:
    raise RuntimeError('WiFi connection failed')
else:
    print('Connected')
    ip = wlan.ifconfig()[0]
    print('IP:', ip)

درصورتیکه ارتباط با شبکه وایفای با موفقیت برقرار شود، این حلقه آدرس IP را برگردانده و آن را چاپ میکند.

def read_dht():
    sensor.measure()
    temperature = sensor.temperature
    humidity = sensor.humidity
    return temperature, humidity

تابع بالا، مقادیر دما و رطوبت را از سنسور DHT11 میخواند.

def webpage(temperature, humidity):
    html = f"""
        <!DOCTYPE html>
        <html>
        <body>
        <head>Raspberry pi pico W web server </head>
        <p>Temperature: <span id="temp">{temperature}</span> degrees Celsius</p>
        <p>Humidity: <span id="hum">{humidity}</span> %</p>
        <script>
            setInterval(function() {{
                fetch('/data')
                .then(response => response.json())
                .then(data => {{
                    document.getElementById('temp').innerHTML = data.temperature;
                    document.getElementById('hum').innerHTML = data.humidity;
                }});
            }}, 5000);
        </script>
        </body>
        </html>
    """
    return html

این تابع، یک صفحه وب HTML که شامل فضای خالی و رزرو شده برای داده دما و رطوبت است، ایجاد میکند. این تابع همچنین برای به روز رسانی پویا و هر 5 ثانیه یکبار داده ها، یک کد JavaScript را با یک درخواست واکشی (fetch) به اندپوینت ‘data’/ فراخوانی میکند.

def serve(connection):
    while True:
        client = connection.accept()[0]
        request = client.recv(1024)
        request = str(request)
        try:
            request = request.split()[1]
        except IndexError:
            pass
        print(request)
        if request == '/data':
            temperature, humidity = read_dht()
            print("temp :"+str(temperature))
            print(" humidity :"+str(humidity))          
            response = {'temperature': temperature, 'humidity': humidity}
            client.send(json.dumps(response))
        else:
            html = webpage(0, 0)  # Initial values for temperature and humidity
            client.send(html)
        client.close()

این تابع، ارتباطات کلاینت را مدیریت کرده و براساس درخواست HTTP دریافت شده، پاسخی مناسب میدهد. اگر درخواست دریافتی ‘data’/ باشد، قطعه کد داده دما و رطوبت را میخواند.

دسترسی به وب سرور Raspberry Pi

در ابتدا شما باید کد را با باز کردن فایل main.py در Thonny IDE اجرا کنید. سپس بر گزینه run current script در گوشه بالا سمت چپ کلیک کرده و هات اسپات تلفن همراه خود را فعال کنید. به یاد داشته باشید که حتما SSID و رمز هات اسپات را در کد تغییر دهید.

دسترسی به وب سرور Raspberry Pi

میتوانید در IDE مشاهده کنید که میکروکنترلر Pico W به تلفن همراه شما متصل شده است. کد آدرس IP شما را چاپ کرده وسپس به طور مداوم داده را به صورت real-time به صفحه وب HTML ارسال میکند.

حال تلفن همراه خود را باز کرده و آدرس IP خود را در نوار آدرس پیست کنید. (آدرس های IP متفاوت هستند، پس لطفا آدرس IP خود را از طریق IDE بررسی کنید.)

اگر مراحل را به درستی انجام داده باشید، درنهایت صفحه خروجی شما باید به این شکل باشد و همچنین باید به طور اتوماتیک و real-time هر 5 ثانیه یکبار داده خود را به روز کند.

با دنبال کردن این آموزش، شما قادر خواهید بود با استفاده از رزبری پای پیکو W و سنسور DHT11، یک سیستم مانیتورینگ دما و رطوبت real-time بسازید. این پروژه قدرت و انعطاف میکروکنترلر رزبری پای پیکو W را در کار با یک سنسور معروف نشان میدهد. این ویژگی ها باعث میشوند که بسیاری دیگر از پروژه های IoT قابل اجرا باشند.

به کمک وب سرور real-time، میتوانید به آسانی شرایط محیطی را زیرنظر گرفته و این داده ها را در پروژه ها یا سیستم های خود استفاده کنید.

موارد موجود در فایل : سورس کامل

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *