جدول المحتويات:

تم الاطلاع على حل IoTea LoRa (تحديث 1811): 5 خطوات
تم الاطلاع على حل IoTea LoRa (تحديث 1811): 5 خطوات

فيديو: تم الاطلاع على حل IoTea LoRa (تحديث 1811): 5 خطوات

فيديو: تم الاطلاع على حل IoTea LoRa (تحديث 1811): 5 خطوات
فيديو: How To Do Stable Diffusion LORA Training By Using Web UI On Different Models - Tested SD 1.5, SD 2.1 2024, يوليو
Anonim
رؤية حل IoTea LoRa (تحديث 1811)
رؤية حل IoTea LoRa (تحديث 1811)

الإنترنت + هو مفهوم شائع الآن. هذه المرة جربنا الإنترنت بالإضافة إلى الزراعة لجعل حديقة الشاي تنمو عبر الإنترنت. شاي.

الخطوة 1: الأشياء المستخدمة في هذا المشروع

مكونات الأجهزة

  • جروف - مستشعر ثاني أكسيد الكربون (MH-Z16)
  • جروف - مستشعر الضوء الرقمي
  • جروف - جهاز استشعار الغبار (PPD42NS
  • جروف - مستشعر الأكسجين (ME2-O2-Ф20)
  • رطوبة التربة ومستشعر درجة الحرارة
  • بوابة LoRa LoRaWAN - مجموعة 868 ميجا هرتز مع Raspberry Pi 3
  • جروف - مستشعر درجة الحرارة وهومي والبارومتر (BME280)

تطبيقات البرمجيات والخدمات عبر الإنترنت

مايكروسوفت فيجوال ستوديو 2015

الخطوة الثانية: القصة

على جبل مينجدينج شمال شرق يان ، سيتشوان ، تمتد سلسلة التلال الجبلية من الغرب إلى الشرق في بحر أخضر. هذا مشهد مألوف للغاية بالنسبة لدنغ البالغ من العمر 36 عامًا ، وهو أحد صانعي الشاي القلائل جدًا من جيله ، بمزرعة تبلغ مساحتها 50 مترًا مكعبًا (= 3.3 هكتارًا) تقع على ارتفاع 1100 متر فوق مستوى سطح البحر. ينحدر دينغ من عائلة من صانعي الشاي ، لكن الاستمرار في إرث العائلة ليس بالمهمة السهلة. تتم زراعة أنواع الشاي لدينا على ارتفاعات عالية في بيئة عضوية لضمان جودتها الممتازة. ولكن في الوقت نفسه ، تكون كثافة النمو منخفضة ، والتكلفة مرتفعة ، والتبرعم غير متساوٍ ، مما يجعل حصاد الشاي صعبًا. هذا هو السبب في أن شاي الجبال العالية عادة ما يكون حصادًا صغيرًا ولا تنعكس قيمه في السوق. على مدار العامين الماضيين ، حاول دينغ زيادة وعي المستهلك بشاي الجبال العالية لتعزيز قيمته. وعندما التقى فان ، الذي كان يبحث عن مزرعة لتنفيذ تقنية Seeed's IoTea ، تم التوصل إلى حل مثالي.

الخطوة 3: توصيل الأجهزة

يمكن تقسيم أجهزة هذا المشروع إلى 4 أجزاء: الطاقة ، وأجهزة الاستشعار ، والعقدة ، والبوابة. ستوضح لك المقالة التالية كيفية إكمالها خطوة بخطوة.

جزء الطاقة

يحتوي جزء الطاقة بشكل أساسي على لوحة شمسية وبطارية ليثيوم ، إذا قمت ببناء هذا المشروع للتوضيح فقط ، فيمكنك تجاهلها. أو يمكنك اتباع البرنامج التعليمي السابق لتثبيت قوة العقدة.

مجسات الجزء

في جزء المستشعرات ، نظرًا للعديد من المستشعرات ، استخدمنا محطة طقس ، وصنعنا أيضًا دعامة أكريليك لتثبيتها.

صورة
صورة

كما ترى في الصورة أعلاه ، دائمًا ما يكون مستشعر الضوء الرقمي في الأعلى ، حتى يتمكن من جمع معلومات الإضاءة. يتم تثبيت المستشعرات التي تولد الحرارة في منتصف حامل الأكريليك ، مثل مستشعر O2 ومستشعر الغبار ومستشعر ثاني أكسيد الكربون. أخيرًا ، مستشعر درجة الحرارة والرطوبة أسفل قوس الأكريليك.

إلى جانب ذلك ، يتم تركيب مستشعر درجة حرارة التربة والرطوبة بمفرده في التربة. جزء العقدة

صورة
صورة

Node Part هو عبارة عن Seeeduino LoRaWan تم تثبيته في صندوق مقاوم للماء ، وهو يتصل بالطاقة وأجهزة الاستشعار عبر مفاصل المياه. من بينها ، يتصل مستشعر الغبار بدبوس D3 الرقمي من LoRaWan ، ومستشعر CO2 متصل بالدبوس D4 & D5 ، مستشعر التربة متصل بالدبوس D6 & D7 ، مستشعر O2 متصل بالدبوس التناظري A1 ومستشعر الضوء ومستشعر البارومتر متصل بمنفذ I2C.

ملاحظة: يجب إضافة مقاوم 10 كيلو بين كبل مستشعر التربة الأزرق (البيانات) والكابل الأحمر (Vcc).

يجمع Seeeduino LoRaWan قيمة المستشعرات من حين لآخر ، ويرسلها إلى Gateway عبر LoRa. تنسيق البيانات كما يلي:

{

[0] ، / * درجة حرارة الهواء (℃) * / [1] ، / * رطوبة الهواء (٪) * / [2] ، / * الارتفاع (م) ارتفاع بايت * / [3] ، / * الارتفاع (م) بايت منخفض * / [4] ، / * تركيز ثاني أكسيد الكربون (PPM) عالي البايت * / [5] ، / * تركيز ثاني أكسيد الكربون (PPM) بايت منخفض * / [6] ، / * تركيز غبار (قطعة / 0.01cf) مرتفع بايت * / [7] ، / * تركيز الغبار (عدد أجهزة الكمبيوتر / 0.01cf) بايت منخفض * / [8] ، / * شدة الضوء (لوكس) بايت عالي * / [9] ، / * شدة الضوء (لوكس) بايت منخفض * / [10] ، / * تركيز O2 (٪) * / [11] ، / * درجة حرارة التربة (℃) * / [12] ، / * رطوبة التربة (٪) * / [13] ، / * جهد البطارية (V) * / [14] / * رمز خطأ جهاز الاستشعار * /}

كل بت في Sensor Error Code byte لها معنى مختلف ، تمامًا كما هو موضح أدناه:

{

بت 0: 1 ؛ / * خطأ في استشعار البارومتر * / بت 1: 1 ؛ / * خطأ في استشعار ثاني أكسيد الكربون * / بت 2: 1 ؛ / * خطأ في استشعار الغبار * / بت 3: 1 ؛ / * خطأ في مستشعر الضوء * / bit4: 1 ؛ / * خطأ في مستشعر O2 * / بت 5: 1 ؛ / * خطأ في استشعار التربة * / محفوظة: 2 ؛ /* محجوز */ }

بوابة الجزء

صورة
صورة

Gateway Part هو Raspberry Pi الذي يقوم بتوصيل وحدة البوابة RHF0M301–868 و PRI 2 Bridge RHF4T002 ، ويتم تثبيته في صندوق مقاوم للماء والاتصال بالطاقة وكاميرا USB عبر وصلات مائية. نظرًا لأنه يستخدم برامج ثابتة متخصصة ، يرجى اتباع Seeed Wiki لتكوينه.

الخطوة 4: برمجة البرمجيات

نظرًا لأن اتصال الأجهزة ، يمكن أيضًا تقسيم برمجة البرامج ، ويمكن تقسيمها إلى 3 أجزاء: العقدة والبوابة والموقع الإلكتروني.

جزء العقدة

معظم برامج التشغيل التي يتطلبها جزء العقدة موجودة بالفعل في مجلد origin_driver. يجب تثبيت المكتبات التالية يدويًا:

Adafruit_ASFcore

نظرًا لأن المشروع معقد ، نوصيك باستخدام Microsoft Visual Studio بدلاً من Arduino IDE. يمكن أن يساعدك مكون إضافي يسمى Visual Micro في إنشاء مشروع Arduino باستخدام Visual Studio ، انقر هنا لمزيد من المعلومات.

لتحسين إمكانية القراءة والصيانة ، نستخدم البرمجة الشيئية هذه المرة. يبدو مخطط الفصل لهذا المشروع كما يلي:

صورة
صورة

بالنسبة لتلك المستشعرات التي لديها بالفعل برنامج تشغيل OOP ، قمنا بإعادة تعبئتها لتكييف هذا المشروع ، بالنسبة للآخرين ، قمنا بإعادة كتابة برامج التشغيل الخاصة بهم باستخدام OOP. تُستخدم فئة المستشعرات في طبقة البرامج الوسيطة لتوحيد واجهات أجهزة الاستشعار الحقيقية ، على سبيل المثال ، يمكن لمستشعر مقياس الضغط أن يجمع درجة الحرارة والرطوبة والارتفاع في نفس الوقت ، لذلك فهو يحتوي على 3 واجهات للحصول على درجة الحرارة والرطوبة والارتفاع. لكن لديهم اسم طريقة الاختلاف ، مما سيجعل برنامج الحصول على أجهزة الاستشعار أكثر تعقيدًا ، تمامًا مثل هذا:

البارومتر-> getTemperature () ؛

البارومتر-> getHumidity () ؛ البارومتر-> getAltitude () ؛ //… another_sensor-> getSomeValue () ، //…

لكن باستخدام OOP ، يبدو الأمر كما يلي:

لـ (auto i = 0 ؛ i getValue () ؛

}

لقد قمنا أيضًا بتعبئة فئة التطبيق ، وهي تنفذ واجهة IApplication ، ويمكن لطريقة الإعداد () وطريقة الحلقة () في IoTea.ino استدعاء طريقة الإعداد () وطريقة الحلقة () في كائن التطبيق.

ملاحظة: USB المسلسل يستخدم لتصحيح الأخطاء فقط. بعد التصحيح ، يرجى التعليق على رمز التهيئة في طريقة الإعداد ().

بوابة الجزء

يتم استخدام برنامج Python الخاص بـ Gateway Part's في المجلد الرئيسي لالتقاط الصور وتحميلها إلى Amazon S3 Server كل ساعة. قبل استخدامه ، تأكد من تثبيت fswebcam بالفعل في Raspberry Pi الخاص بك:

sudo apt-get update && sudo apt-get install fswebcam

إذا كنت ترغب في تحميل الصور ، فقم بتهيئة AWS باتباع الخطوات. أولاً ، قم بتثبيت AWS SDK و AWS CLI على Raspberry Pi باستخدام هذه الأوامر:

sudo pip تثبيت boto3

sudo pip تثبيت awscli

ثم قم بتشغيل AWS CLI:

sudo تكوين aws

قم بتكوين معرف مفتاح الوصول إلى AWS ومعرف الوصول السري لـ AWS واسم المنطقة الافتراضي.

إذا كنت لا ترغب في تحميل صورك ، فيمكنك تخطي خطوات تكوين AWS وأكواد التعليق حول التحميل في photo.py. لتشغيل هذا البرنامج بعد تمهيد Raspberry Pi في كل مرة ، يمكنك إنشاء صورة لاسم ملف في /etc/init.d ، وكتابة الكود التالي إليها.

#! / بن / باش

# /etc/init.d/photo ### معلومات البدء # يوفر: seeed_photo # Required-Start: $ remote_fs $ syslog # Required-Stop: $ remote_fs $ syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # وصف مختصر: التقاط الصور initscript # الوصف: تُستخدم هذه الخدمة لإدارة التقاط الصور ### END INFO case "$ 1" في البداية) صدى "بدء التقاط الصورة" / home/rxhf/photo.py & ؛؛ stop) صدى "توقف عن التقاط الصورة" اقتل $ (ps aux | grep -m 1 'python3 /home/rxhf/photo.py' | awk '{print $ 2}') ؛؛ *) صدى "Usage: service photo start | stop" exit 1 ؛؛ مخرج esac 0

تعيين إذن التنفيذ

sudo chmod 777 /etc/init.d/photo

sudo chmod 777 / home/rxhf/photo.py

واختبرها

sudo /etc/init.d/photo بدء

إذا لم تكن هناك مشكلة ، فقم بإيقافها وإضافتها إلى تطبيق بدء التشغيل

sudo /etc/init.d/photo stop

إعدادات الصورة الافتراضية sudo update-rc.d

ملاحظة: إذا كنت تريد بدء تشغيل البوابة بعد تمهيد Raspberry Pi ، فأضف رموز بدء البوابة في Seeed Wiki إلى /etc/rc.local ، دعها تبدو كما يلي:

#! / bin / sh -e

# # rc.local # # يتم تنفيذ هذا البرنامج النصي في نهاية كل مستوى تشغيل متعدد المستخدمين. # تأكد من أن البرنامج النصي سوف "يخرج من 0" عند النجاح أو أي قيمة أخرى بالخطأ. # # لتمكين أو تعطيل هذا البرنامج النصي فقط قم بتغيير التنفيذ # بت. # # افتراضيًا ، لا يفعل هذا البرنامج النصي شيئًا. # طباعة عنوان IP _IP = $ (hostname -I) || صحيح إذا ["$ _IP"] ؛ ثم printf "عنوان IP الخاص بي هو٪ s / n" "$ _IP" fi cd /home/rxhf/loriot/1.0.2 sudo systemctl stop pktfwd sudo gwrst wget https://cn1.loriot.io/home/gwsw/loriot -risinghf-r… -O loriot-gw.bin chmod + x loriot-gw.bin./loriot-gw.bin -f -s cn1.loriot.io مخرج 0

موقع الكتروني

لقد نشرنا الموقع على CentOS 7. ستوضح لك الخطوات التالية كيفية النشر.

الخطوة 1. قم بتثبيت Python3

sudo yum -y install epel-release

sudo yum -y قم بتثبيت python36

الخطوة الثانية. قم بتثبيت Python pip والبيئة الافتراضية

wget

sudo python36 get-pip.py sudo pip install virtualenv

Setp 3. استنساخ موقعنا من GitHub

sudo yum -y install git

استنساخ بوابة

الخطوة 4. إنشاء وتفعيل بيئة افتراضية

virtualenv -p python36 iotea-hb

cd iotea-hb مصدر بن / تنشيط

الخطوة 5. تثبيت مكتبات تابعة

نقطة تثبيت pymysql

تثبيت الأنابيب dbutils الأنابيب تثبيت القارورة

الخطوة 6. إنشاء قاعدة بيانات

sudo yum -y تثبيت خادم ماريادب

sudo systemctl تمكين mariadb sudo systemctl بدء mariadb mysql -uroot -p

ثم استخدم iotea_hb.sql لإنشاء جدول.

الخطوة 7. قم بإنشاء db.ini ، واكتب هذه الرموز إليه

[ديسيبل]

db_port = 3306 db_user = الجذر db_host = المضيف المحلي db_pass = db_name = iotea

تغيير مسار db.ini في db.py

# في db.py

# cf.read ("/ data / www / python3_iotea_hb / iotea / conf / db.ini") cf.read ("/ home // iotea-hb / db.ini")

الخطوة 8. قم بتغيير المنفذ في app.py وابدأ موقع الويب:

# في app.py

# app.run (التصحيح = صحيح ، المنفذ = 6000) app.run (التصحيح = صحيح ، المنفذ = 8080)

# في المحطة

نقطة تثبيت gunicorn gunicorn -w 5 -b 0.0.0.0:8080 التطبيق: التطبيق

الآن قم بزيارة 127.0.0.1:8080 في متصفح الويب الخاص بك ، يمكنك رؤية موقع الويب ، ولكن لا يتم عرض البيانات في الوقت الفعلي.

الخطوة 9. الحصول على بيانات لوريوت

افتح محطة أخرى ، وأعد الدخول إلى البيئة الافتراضية وابدأ تطبيق لوريوت:

القرص المضغوط iotea-hb

مصدر بن / تفعيل gunicorn loriot: التطبيق

انتظر لفترة من الوقت ، سترى البيانات معروضة في موقع الويب ، أو يمكنك تغيير wss في loriot.py:

# في loriot.py

#ws = create_connection ("wss: //cn1.loriot.io/app؟ token = vnwEuwAAAA1jbjEubG9yaW90LmlvRpscoh9Uq1L7K1zbrcBz6w ==")

ws = create_connection ()

الخطوة 5: العملية

يمكنك زيارة مواقعنا الإلكترونية لعرض البيانات في الوقت الفعلي:

  • في يان
  • للتظاهر

موصى به: