সুচিপত্র:

আবহাওয়া স্টেশন: গভীর ঘুম, এসকিউএল, ফ্লাস্ক এবং প্লটলি গ্রাফিং সহ ESP8266: 3 ধাপ
আবহাওয়া স্টেশন: গভীর ঘুম, এসকিউএল, ফ্লাস্ক এবং প্লটলি গ্রাফিং সহ ESP8266: 3 ধাপ

ভিডিও: আবহাওয়া স্টেশন: গভীর ঘুম, এসকিউএল, ফ্লাস্ক এবং প্লটলি গ্রাফিং সহ ESP8266: 3 ধাপ

ভিডিও: আবহাওয়া স্টেশন: গভীর ঘুম, এসকিউএল, ফ্লাস্ক এবং প্লটলি গ্রাফিং সহ ESP8266: 3 ধাপ
ভিডিও: ये कà¥?या है जानकार आपके à¤à¥€ पसीने छà¥?ट ज 2024, জুলাই
Anonim
ওয়েদার স্টেশন: ESP8266 উইথ ডিপ স্লিপ, এসকিউএল, গ্রাফিং বাই ফ্লাস্ক অ্যান্ড প্লটলি
ওয়েদার স্টেশন: ESP8266 উইথ ডিপ স্লিপ, এসকিউএল, গ্রাফিং বাই ফ্লাস্ক অ্যান্ড প্লটলি

আপনার বারান্দায় তাপমাত্রা, আর্দ্রতা বা আলোর তীব্রতা জানতে কি মজা হবে? আমি জানি আমি করবো। তাই এই ধরনের তথ্য সংগ্রহের জন্য আমি একটি সহজ আবহাওয়া কেন্দ্র তৈরি করেছি। নিম্নোক্ত বিভাগগুলি হল একটি নির্মাণের জন্য আমি যে পদক্ষেপ নিয়েছি।

চল শুরু করি!

ধাপ 1: আলো, তাপমাত্রা এবং আর্দ্রতা সেন্সর সহ আবহাওয়া কেন্দ্র

হালকা, তাপমাত্রা এবং আর্দ্রতা সেন্সর সহ আবহাওয়া কেন্দ্র
হালকা, তাপমাত্রা এবং আর্দ্রতা সেন্সর সহ আবহাওয়া কেন্দ্র
হালকা, তাপমাত্রা এবং আর্দ্রতা সেন্সর সহ আবহাওয়া কেন্দ্র
হালকা, তাপমাত্রা এবং আর্দ্রতা সেন্সর সহ আবহাওয়া কেন্দ্র
হালকা, তাপমাত্রা এবং আর্দ্রতা সেন্সর সহ আবহাওয়া কেন্দ্র
হালকা, তাপমাত্রা এবং আর্দ্রতা সেন্সর সহ আবহাওয়া কেন্দ্র
হালকা, তাপমাত্রা এবং আর্দ্রতা সেন্সর সহ আবহাওয়া কেন্দ্র
হালকা, তাপমাত্রা এবং আর্দ্রতা সেন্সর সহ আবহাওয়া কেন্দ্র

যখন আমি একটি আবহাওয়া স্টেশন তৈরির পরিকল্পনা করেছিলাম, তখন আমি একটি পূর্ণাঙ্গ আবহাওয়া কেন্দ্রের স্বপ্ন দেখছিলাম যেখানে বাতাসের গতি, বৃষ্টির পরিমাপ, পূর্ণ বর্ণালী সৌর সেন্সর ছিল, কিন্তু দেখা গেল, এটি সস্তা হবে না, এবং ক্রয় খরচ শেষ হতে পারে কমপক্ষে $ 100। আমি সম্পূর্ণ বিকল্পগুলি ছেড়ে দিয়েছি এবং কমপক্ষে $ 10 দিয়ে একটি তৈরি করতে শুরু করেছি। $ 10 হল নীচের অংশ হিসাবে আবহাওয়া কেন্দ্রের মৌলিক উপাদানগুলির মূল্য।

এখানে অংশগুলি হল:

1. ESP8266 Wemos ব্র্যান্ড Aliexpress এ $ 2.39 পিসি খরচ করে। আমি Wemos ব্র্যান্ডের সুপারিশ করব কারণ এর EPS8266 প্রোগ্রাম করা, আপডেট করা এবং 4MB ফ্ল্যাশ বা তার বেশি করা সহজ।

2. ওয়েমোস চার্জার-বুস্ট শিল্ডের দাম $ 1.39 পিসি। এই ব্র্যান্ড ব্যবহার করার জন্য এটি আরেকটি সুবিধা। এটি লিথিয়াম ব্যাটারি (নামমাত্র ভোল্টেজ = 3.7V) এর ESP8266 এর জন্য 5V এর জন্য একটি বুস্ট-আপ বোর্ড রয়েছে। বোর্ড সর্বোচ্চ চার্জিং কারেন্ট = 1M সহ চার্জিং বিকল্পের সাথে আসে।

*দ্রষ্টব্য: লিথিয়াম ব্যাটারি চার্জিং/বুস্ট আপ করার জন্য একটি সস্তা বিকল্প রয়েছে। এইটার দাম 5pcs এর জন্য 1.77 ডলার। যাইহোক, যখন আমি এই বোর্ডটি ESP8266 (Wemos বা খালি ESP8266) এর জন্য ব্যবহার করেছি, ESP8266 এর গভীর ঘুমের মোড ESP8266 কে স্লিপ-রিসেট-স্লিপের একটি লুপে তৈরি করার পরেই একটি রিসেট চালু করেছে, যা খুবই বিরক্তিকর। কি ঘটছে জানলে আমাকে ইনবক্স করুন।

3. ওয়েমোসের তাপমাত্রা এবং আর্দ্রতার জন্য বেশ কয়েকটি ieldsাল রয়েছে কিন্তু আমি পৃথক উপাদান থেকে তৈরি করতে যাচ্ছি। ফটোরিসিস্টর (বা হালকা-নির্ভর প্রতিরোধক-ldr, সস্তা), একটি আলোকসজ্জা সেন্সর যেমন BH1780 বা TSL2561 (প্রায় 0.87-0.89c পিসি), একটি তাপমাত্রা সেন্সর যেমন DS18B20 (75c প্রতিটি), এবং একটি আর্দ্রতা এবং তাপমাত্রা কম্বো যেমন DHT22 (এখানে $ 2.35) অথবা SHT21 ($ 2.20 এখানে)। সেন্সরের মোট খরচ ~ $ 4।

4. লিথিয়াম ব্যাটারি। আমি একটি 7.4V ক্যানন ব্যাটারি থেকে উদ্ধার করেছি যা সিরিজের দুটি 3.7V ব্যাটারি বা 18650 লিথিয়াম ব্যাটারি। প্রতি 18650 এর দাম প্রায় $ 5। আমার একটি ছবি আছে ক্যামেরা ব্যাটারি প্যাক টিয়ার-ডাউন। যদিও সাবধান থাকুন, প্লাস্টিকের কভার দিয়ে কাটার সময় শর্ট সার্কিট করলে চরম তাপ উৎপন্ন হতে পারে এবং পুড়ে যেতে পারে।

5. PCB বোর্ড, জাম্পার, তার, সোল্ডারিং, আপনার সময়, হয়তো কিছু ডিবাগিং দক্ষতা।

তারের উপাদানগুলিকে একসঙ্গে উপরের পরিকল্পিত অনুসরণ করা যাক।

তারপরে, সেটআপ লুপে টাস্কটি দেখুন। এটি কেবল এক-রানের কাজ এবং স্লিপ কমান্ডের মাধ্যমে শেষ হয়।

অকার্যকর সেটআপ () {Serial.begin (115200); Serial.println ("স্টার্ট নোড নামে" + স্ট্রিং (SENSORNAME)); setup_wifi (); বিলম্ব (100); Wire.begin (); পিনমোড (ldrPin, INPUT); SHT21. শুরু (); যদি (! tsl.begin ()) {Serial.print ("TSL2561 পাওয়া যায়নি"); যখন (1); } বিলম্ব (100); ldr = analogRead (ldrPin); tsl.enableAutoRange (সত্য); tsl.setIntegrationTime (TSL2561_INTEGRATIONTIME_13MS); বিলম্ব (100); sensors_event_t ইভেন্ট; tsl.getEvent (& ইভেন্ট); if (event.light) lux = event.light; অন্য সিরিয়াল.প্রিন্টলন ("সেন্সর ওভারলোড");

h = SHT21.getHumidity ();

t = SHT21.getTemperature (); tempSensor.setWaitForConversion (মিথ্যা); tempSensor.begin (); বিলম্ব (100); যদি (tempSensor.getDeviceCount () == 0) {Serial.printf ("DS18x20 পিন %d / n" তে পাওয়া যায়নি, ds18b20); Serial.flush (); বিলম্ব (1000); } বিলম্ব (100); tempSensor.request তাপমাত্রা (); t18 = tempSensor.getTempCByIndex (0); Serial.printf ("\ nLight: %d lux / t", lux); Serial.printf ("LDR: %d /1024 / t", ldr); Serial.printf ("T: %0.2f *C / t", t); Serial.printf ("H:%0.2f / t", h); Serial.printf ("HIC: %0.2f / t", hic); বিলম্ব (100); client.setServer (mqtt_server, mqtt_port); client.setCallback (কলব্যাক); পুনরায় সংযোগ (); বিলম্ব (100); ESP.deepSleep (3e8); // 300 মিলিয়ন মাইক্রো সেকেন্ড, 300 সেকেন্ড, 5 মিনিট; }

ডিবাগিং বা সেট আপ করার সময়, ESP.deepsleep () ক্রমাগত সিরিয়াল রিডআউট করার জন্য কমান্ড করুন। বরাবরের মতো, ESP8266 এ আপলোড করার সম্পূর্ণ কোড এখানে হোস্ট করা হয়েছে (গিটহাব)।

গভীর ঘুমের পরে জেগে ওঠার জন্য RST এবং D0/GPIO16 এর মধ্যে জাম্পার রাখতে ভুলবেন না।

এখন, ESP8266 এ Arduino IDE ব্যবহার করে কোড আপলোড করার সময়।

ধাপ 2: MQTT: ডেটা প্রকাশ এবং সাবস্ক্রাইব করার একটি নমনীয় মাধ্যম

MQTT: ডেটা প্রকাশ ও সাবস্ক্রাইব করার একটি নমনীয় মাধ্যম
MQTT: ডেটা প্রকাশ ও সাবস্ক্রাইব করার একটি নমনীয় মাধ্যম
MQTT: ডেটা প্রকাশ ও সাবস্ক্রাইব করার একটি নমনীয় মাধ্যম
MQTT: ডেটা প্রকাশ ও সাবস্ক্রাইব করার একটি নমনীয় মাধ্যম

প্রথমত, আমি আমার বাড়ির বিভিন্ন সেন্সর এবং ক্লায়েন্টদের কাছে ডেটা প্রেরণ এবং গ্রহণের জন্য MQTT ব্যবহার করতে আগ্রহী হয়ে উঠছি। এর কারণ হল একটি বিষয় দ্বারা শ্রেণিবদ্ধ সীমাহীন ডেটা পাঠানোর নমনীয়তা এবং এমকিউটিটি ব্রোকার থেকে একটি বিষয়ে সাবস্ক্রাইব করার জন্য সীমাহীন ক্লায়েন্ট। দ্বিতীয়ত, আমি গভীরভাবে MQTT নিয়ে আলোচনা করার যোগ্য নই। নোড-রেড ব্যবহার করে একটি আবহাওয়া কেন্দ্র এবং সেন্সর স্থাপনের টিউটোরিয়াল অনুসরণ করার সময় আমি গত বছর (2017) MQTT জানতে পেরেছিলাম। যাইহোক, আমি আপনার কাছে কিছু তথ্য উপস্থাপন করার জন্য যথাসাধ্য চেষ্টা করব। আরেকটি ভালো জায়গা হল উইকিপিডিয়া।

আপনার যদি তত্ত্ব সম্পর্কে পড়ার সময় না থাকে, এবং একটি MQTT দালাল স্থাপন করতে চান, আমি এটি করার জন্য আরেকটি টিউটোরিয়াল পোস্ট করেছি। এই পোস্টটি দেখুন এবং ধাপ 4 এ নিচে স্ক্রোল করুন।

মেসেজ কিউইং টেলিমেট্রি ট্রান্সপোর্ট (এমকিউটিটি) আমার বোঝার মধ্যে কি তা ব্যাখ্যা করার জন্য, আমি উপরের মতো একটি ডায়াগ্রাম প্রস্তুত করেছি। সংক্ষেপে, এমকিউটিটি একটি আইএসও স্ট্যান্ডার্ড, এবং একটি পণ্য যেমন মশা এবং মশা-ক্লায়েন্ট, দুটি প্যাকেজ যা আমি রাস্পবেরি পাইতে এমকিউটিটি ব্রোকার তৈরি করেছি, সেই মান মেনে চলতে হবে। এমকিউটিটি ব্রোকার তখন প্রকাশকদের কাছে একটি বার্তা এবং গ্রাহকদের একটি লক্ষ্য বিষয় শোনার জন্য একটি মাধ্যম হয়ে ওঠে।

ArduinoJson এর সাথে Arduino PubSubclient লাইব্রেরির সংমিশ্রণ, এর নির্মাতা knolleary এবং bblanchon কে ধন্যবাদ, সেন্সর থেকে টার্গেট ইকুইপমেন্ট বা এন্ড ক্লায়েন্টের টুলগুলির জন্য টিঙ্কার এবং ডেভেলপারদের জন্য সহজ করে তোলে।

ডেটাবেস তৈরির সাথে এগিয়ে যান এবং কিছু ডেটা প্রদর্শন করুন।

ধাপ 3: এসকিউএলে ডেটা সংরক্ষণ করুন এবং একটি ওয়েব সার্ভারে তাদের প্রদর্শন করুন

SQL- এ ডেটা সেভ করুন এবং একটি ওয়েব সার্ভারে তাদের প্রদর্শন করুন
SQL- এ ডেটা সেভ করুন এবং একটি ওয়েব সার্ভারে তাদের প্রদর্শন করুন
এসকিউএল -এ ডেটা সংরক্ষণ করুন এবং একটি ওয়েব সার্ভারে তাদের প্রদর্শন করুন
এসকিউএল -এ ডেটা সংরক্ষণ করুন এবং একটি ওয়েব সার্ভারে তাদের প্রদর্শন করুন

আমি ওয়েব সার্ভারের জন্য একটি ডাটাবেস তৈরি করতে sqlite3 ব্যবহার করেছি। Rapberry Pi এ sqlite3 ইনস্টল করুন:

sudo apt-get sqlite3 ইনস্টল করুন

টার্মিনালে টাইপ করে একটি ডাটাবেস এবং একটি টেবিল তৈরি করা হয়েছে:

sqlite3 weatherstation.db

সারণী আবহাওয়ার ডেটা তৈরি করুন (আইডি INT প্রাথমিক কী, সময় DATETIME, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);

.exit // sqlite কমান্ড লাইন থেকে বেরিয়ে আসতে এবং লিনাক্স টার্মিনালে ফিরে আসতে

আবহাওয়া স্টেশন দ্বারা প্রকাশিত একটি বিষয় শোনার জন্য, আমি পাইথনের সাথে একটি পাহো লাইব্রেরি ব্যবহার করেছি:

#! /usr/bin/python3# থেকে গৃহীত: > # binh nguyen, august 04, 2018, from time import localtime, strftime, sleep import paho.mqtt.client as mqtt import sqlite3, json

mqtt_topic = 'balcony/weatherstation'

mqtt_username = "johndoe" mqtt_password = "password" dbfile = "/path/to/databse/weatherstation.db" mqtt_broker_ip = '192.168.1.50'

# the callback for when the client receives a connack response from the server.

def on_connect(client, userdata, flags, rc): print("connected with result code "+str(rc)) client.subscribe(mqtt_topic) # the callback for when a publish message is received from the server. def on_message(client, userdata, msg): thetime = strftime("%y-%m-%d %h:%m:%s", localtime())

topic = msg.topic

payload = json.dumps(msg.payload.decode('utf-8')) sql_cmd = sql_cmd = """insert into weatherdata values ({0}, '{1}', {2[ldr]}, {2[tsl2561]}, {2[ds18b20]}, {2[tsht21]}, {2[hsht21]})""".format(none, time_, payload) writetodb(sql_cmd) print(sql_cmd) return none

def writetodb(sql_cmd):

conn = sqlite3.connect(dbfile) cur = conn.cursor() cur.execute(sql_command) conn.commit()

client = mqtt.client()

client.on_connect = on_connect client.on_message = on_message client.username_pw_set(username=mqtt_username, password=mqtt_password) client.connect(mqtt_broker_ip, 1883, 60) sleep(1) client.loop_forever()

to display data from use another sql command to query data from the database such as:

sql_command = """ select * from weatherdata order by thetime desc limit 1000;"

this sql command is included in the app.py that uses flask framework and plotty to make a web server and plotting a graph.

the complete code is hosted on the github.

if the esp8266 cannot read the ds18b20, it assigned a value of -127 as the temperature which skews the relative range of other readable temperatures. i cleaned up those values by set a null value to those equals to -127:

sqlite3 weatherstation.db

sqlite3> update weatherdata set ds18b20 = null where ds18b20 = -127;

to set up an environment for this mini web server, i used the shared libraries on raspberry pi. a virtualenv is a better option if the web server is hosted on a powerful computer. start the web server by:

python3 app.py

press control + c to stop the server.

the web server is set to auto-refreshed for every 60 seconds. you can change the interval in index.html file:

battery performance:

i did not measure the current between the normal state or sleep state of esp8266. many others did so. the first google search turned to this page. the normal state of esp8266 consumes about 100ma depends on the rate of transmitting and wifi activity. the deep-sleep state needs in the range of micro a, which a thousand times less.

for 5-minute interval between sleeping and waking up, one single lithium 18650 (2000mah) could fuel my weather station for 12 days. the same battery only enough for esp 8266 ran less than a day with a normal working state. the one i took from the camera battery pack (did not know the capacity) was enough to run the weather station with deep sleep for 5-6 days.

thank you for spending time with me to this end.

প্রস্তাবিত: