اینترنت اشیا IOT برد ESP8266 برد Nodemcu سیم کارت GSM - GPRS پلتفرم ThingSpeak

پروژه اینترنت اشیا با پلتفرم ThingSpeak و ESP8266 اینترنت ماژول SIM800L

نوشته شده توسط علی زاهدی, CiferTech

پیش از این در آموزش های مختلفی برقراری ارتباط با پلتفرم های IOT به کمک Wifi بردهای ESP را انجام داده ایم. اما ممکن است در شرایطی برقراری ارتباط Wifi امکان پذیر نباشد. در این شرایط میتوان از ماژول GSM برای اتصال به اینترنت استفاده نمود. ماژول SIM800L از محبوب ترین ماژول های GSM است که از برقراری ارتباط GPRS نیز پشتیبانی می‌کند. در این پست قصد داریم اینترنت اشیا با پلتفرم ThingSpaek و نحوه برقراری ارتباط با پلتفرم با اینترنت سیم کارت ماژول SIM800L را آموزش دهیم. در ادامه با مرجع تخصصی اینترنت اشیا به زبان فارسی، دیجی اسپارک همراه باشید.

 

 


ماژول SIM800L


ماژول های سیم کارت مختلفی در بازار موجود است. یکی از محبوب ترین ماژول ماژول های سیم کارت، ماژول SIM800L است. این ماژول به دلیل اندازه کوچک، قیمت نسبتا مناسب و قابلیت های مختلفی که دارد بسیار محبوب شده است. با استفاده از این ماژول قادر خواهید بود همانند یک تلفن همراه به شبکه متصل شده و عملیات هایی مانند برقراری تماس، ارسال و دریافت پیامک و حتی اتصال به اینترنت را انجام دهید. این ماژول دارای یک اسلات سیم کارت است که سیم کارت از نوع mini درون آن قرار میگیرد. ماژول SIM800 را میتواند از طریق USART کنترل کنید. دو پایه RX و TX بر روی ماژول برای دریافت فرمان و ارسال داده از طریق USART وجود دارد. بر روی ماژول پایه هایی برای اتصال میکروفون و بلندگو نیز وجود دارد.

 

SIM800L یک مودم مینیاتوری GSM است که می تواند در تعداد زیادی از پروژه های اینترنت اشیا ادغام شود. شما می توانید از این ماژول برای انجام تقریبا هر کاربردی که یک تلفن همراه معمولی قادر به انجام است، استفاده کنید. پیام کوتاه متنی، برقراری یا دریافت تماس تلفنی، اتصال به اینترنت از طریق GPRS  TCP/IP و موارد دیگر که برای تکمیل آن، این ماژول از شبکه چهار بانده GSM/GPRS پشتیبانی می کند، به این معنی که تقریبا در هر کجا که آنتن دهی باشد کار می کند. ماژول برای اتصال به شبکه به آنتن خارجی نیاز دارد. این ماژول معمولا دارای یک آنتن حلزونی است و مستقیما به پین NET در PCB لحیم می شود. در صورتی که بخواهید آنتن را از برد دور نگه دارید، برد همچنین دارای یک اتصال دهنده U.FL است. در قلب ماژول SIM800L یک تراشه GSM از SimCom قرار دارد. ولتاژ کاری تراشه از ۳٫۴ ولت تا ۴٫۴ ولت است که آن را به گزینه‌ای ایده آل برای تامین مستقیم باتری LiPo تبدیل می کند. این امر باعث می شود تا گزینه خوبی برای پروژه هایی بدون فضای زیاد باشد.

این ماژول در محدوده فرکانسی ۸۵۰/۹۰۰/۱۸۰۰/۱۹۰۰ فعال است. بنابراین، بدون هیچ مشکلی در ایران قابل استفاده خواهد بود. از طرفی دیگر، این ماژول ها به هیچ عنوان وارد طرح رجیستری نشده و بدون نیاز به فعال سازی آن در سامانه همتا، می توان با خیالی آسوده در پروژه های کنترل از راه دور، از این ماژول استفاده نمود.

 


برد ESP8266


تراشه های ESP8266 از موارد محبوب در زمینه اینترنت اشیا هستند که نسبت به دیگر نمونه ها کیفیت بهتر و همچنین قیمت پایین تری نیز دارند، هسته مرکزی این ماژول ESP8266 EX می باشد که در واقع زیر این شیلد فلزی قرار گرفته است، در ضمن این شیلد فلزی به منظور کاهش نویز و همچنین محافظت از قطعات SMD حساس این ماژول قرار داده شده است. این ماژول ها در سری های مختلفی تولید می‌شوند از جمله esp01 و esp12، در واقع تفاوتی که مدل ها با یکدیگر دارند تعداد GPIO ها و همچنین حافظه آن ها است البته معمولا از نظر ظاهری نیز تفاوت هایی که با یکدیگر دارند که قابل تشخیص است. این ماژول ها از شبکه WIFI داخلی پشتیبانی می‌کنند، این میکرو کنترلر ها اولین بار در سال ۲۰۱۴ به بازار عرضه شدند. ESP8266 دارای ۱۳ GPIO و همچنین یک ورودی آنالوگ (A0) است.

 

 


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


سنسور دما و رطوبت DHT11 سنسوری ارزان قیمت جهت اندازه گیری دما و  رطوبت هوا است. اندازه، مصرف کم انرژی آن را به یکی از بهترین گزینه‌ها جهت استفاده در پروژه‌های مختلف، تبدیل کرده است. با توجه به خروجی دیجیتال این سنسور، به راحتی می تواند به pyboard  و یا سایر میکروکنترلر ها متصل گردد.  سنسور DHT11 کالیبره شده و دارای خروجی دیجیتال است. محدوده اندازه گیری رطوبت بین ۲۰ تا ۹۰% RH و محدوده‌ی دما از ۰ تا ۵۰ درجه سانتی گراد می‌باشد. ولتاژ کاری ماژول DHT بین ۳٫۳ تا ۵ ولت DC است. فاصله انتقال سیگنال در ماژول DHT11 تا ۲۰ متر می‌باشد. ماژول دما و رطوبت DHT11 بسیار مقرون به صرفه، دارای کیفیت‌ عالی و واکنش سریع نسبت به تغییر دمای محیط است. ماژول DHT11 به ترتیب دارای ۳ پایه GND, VCC, Signal می‌باشد.

 


ماژول کاهنده LM2596


LM2596 یک آی سی تنظیم کننده سوئیچینگ step-down و محبوب است. نسخه قابل تنظیم می تواند ولتاژ ورودی را از ۴٫۵ ولت به ۴۰ ولت و  منبع ولتاژ متغیر تا ۳ آمپر جریان تبدیل کند. به دلیل توانایی بالای جریان آن معمولا در پروژه های نیاز تغذیه برای تامین برق استفاده می شود. LM2596 به دلیل رتبه بندی بالای جریان ۳A شناخته شده است. این مورد در بسیاری از نسخه ها با ولتاژ خروجی ثابت مانند ۳٫۳ ولت، ۵ ولت و ۱۲ ولت موجود است. اما مشهورترین آن LM2596-ADJ است که ولتاژ خروجی متغیری دارد. این IC در واقع یک مبدل باک است که با فرکانس سوئیچینگ ۱۵۰ کیلوهرتز کار می کند، ولتاژ ورودی را دریافت و از مدار سوئیچینگ داخلی برای تنظیم ولتاژ خروجی دلخواه استفاده می کند. بنابراین اگر به دنبال یک ماژول کوچک و مبدل جریان step-down هستید، LM2596 می تواند گزینه مناسبی برای شما باشد. از این ماژول می‌توان برای تامین برق تجهیزات الکترونیکی، هنگامی که تجهیزات به منبع تغذیه ۳ الی ۳۵ ولت نیاز دارند، با استفاده از این ماژول می توان ولتاژ را به راحتی بر روی ولتاژ مورد نیاز تنظیم کرد. همچنین می تواند برای تست ولتاژ کار سیستم استفاده شود. هنگام انجام پروژه، می توانید از این ماژول برای رفع اشکال دامنه ولتاژ کار در سیستم های مختلف آزمایش ولتاژ استفاده کنید.
  1. دامنه ولتاژ ورودی این ماژول بین DC 3.2V الی ۴۰V است. توجه داشته باشید ولتاژ ورودی باید ۱٫۵ ولت بیشتر از ولتاژ خروجی باشد.
  2. دامنه ولتاژ خروجی قابل تنظیم است و بین ۱٫۲۵ ولت الی ۳۵ ولت است؛ جریان خروجی می تواند به ۳A برسد. زمانی که چراغ نشانگر روشن است به این معنا است که ماژول به خوبی کار می کند.
  3. با تنظیم پتانسیومتر آبی می‌توانید به خروجی مدنظر برسید، که به طور کلی چرخش پتانسیومتر در جهت عقربه های ساعت باعث افزایش نیرو می شود و چرخش در جهت خلاف جهت عقربه ساعت باعث پایین آمدن می شود.

 


اینترنت سیم کارت GPRS


عبارت GPRS مخفف سرویس ارسال و دریافت داده رادیویی(General Radio Packet Service) است. این تکنولوژی قادر است تا سرعت بین ۵۶ الی ۱۱۴ کیلوبیت بر ثانیه داشته باشد. به کمک این فناوری می توانید به ارسال و دریافت داده بپردازید. این داده ها ها می توانند از حجم کم مثل دمای محیط تا داداه هایی با حجم بالا نظیر عکس باشند. ماژول SIM800L می تواند به کمک این فناوری، به ارسال و دریافت داده بپردازد. به عنوان مثال، میتوان دمای محیط را به یک سرور ارسال کرد و یا فرمان قطع و وصل رله را از یک سرور، به ماژول ارسال نمود.

 


اینترنت اشیا با پلتفرم ThingSpeak


پلتفرم ThingSpeak یک برنامه open source اینترنت اشیا و API برای ذخیره و بازیابی اطلاعات از طریق پروتکل های HTTP و MQTT با اینترنت و یا با استفاده از شبکه محلی است. Thingspeak به شما امکان می دهد داده های سنسور ها را جمع آوری، ذخیره کنید و تجزیه و تحلیل کنید، همچنین با استفاده از امکانات موجود در دشبورد IOT این سایت می توانیم نمودار هایی بر اساس مقادیر بدست آمده رسم کنیم. ThingSpeak یک سرویس پلتفرم تجزیه و تحلیل اینترنت اشیا است که به شما امکان می دهد جریان های داده زنده را در کلاود جمع آوری، تجسم و تجزیه و تحلیل کنید. می توانید از طریق دستگاه های خود داده ها را به ThingSpeak ارسال کنید، ایجاد تصویری فوری از داده های زنده و با استفاده از سرویس های وب مانند Twitter و Twilio هشدار ارسال کنید. ThingSpeak مهندسان و دانشمندان را قادر می سازد تا نمونه های اولیه و ساخت سیستم های اینترنت اشیا را بدون تنظیم سرورها یا توسعه نرم افزارهای وب ایجاد کنند.

 


شرح آموزش


همانطور که در ابتدای آموزش گفته شد. ممکن است در برخی از موارد استفاده از قابلیت اتصال به Wifi در تراشه های ESP8266 وجود نداشته باشد. در این مواقع برای اتصال به اینترنت بایستی به فکر راه دیگری باشیم. استفاده از قابلیت GPRS در ماژول های GSM مانند SIM800L میتواند راه مناسبی باشد. در این پروژه با استفاده برد nodemcu (البته با اعمال تغیرات بسیار کوچک در روند اجرای پروژه میتواند از دیگر برد های مبتنی بر تراشه ESP8266 نیز استفاده کنید) مقادیر سنسور DHT11 را تحلیل می‌کنیم و با استفاده از برد SIM800L اینترنت مورد نیاز برای برد ESP8266 را تامین خواهیم کرد تا در ادامه با استفاده از API سایت ThingSpeak مقادیر دما و رطوبت سنسور را به دشبورد IoT خود ارسال کنیم. در این پروژه از اینترنت GPRS استفاده می‌کنیم که توسط ماژول SIM800L فراهم می‌شود، که به ما این امکان را می‌دهد تا در هر زمان و مکان قادر به ارسال اطلاعات به دشبورد ThingSpeak باشیم.

 


وسایل مورد نیاز


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

 


کتابخانه‌های موردنیاز


ابتدا در نرم افزار Arduino IDE اقدام به نصب کتابخانه مرجع سنسور های DHT و همچنین کتابخانه را‍‌ه‌اندازی ماژول های GSM یعنی TinyGsmClient می پردازیم. مراحل زیر را دنبال کنید:

  1. این مسیر را دنبال کنید Sketch Include Library > Manage Libraries
  2. کلمه DHT sensor را جستجو کنید.
  3. کتابخانه را نصب کنید.

 

  • در ادامه در بخش جستجو مانند مراحل قبل کلمه TinyGsmClient را جستجو وکتابخانه را نصب کنید.

 


راه اندازی دشبورد ThingSpeak


این بخش در آموزش قبلی هم توضیح داده شد. ولی مجددا برای افزایش سرعت آموزش در این پست هم توضیح خواهم داد. ابتدا به آدرس thingspeak.com مراجعه کنید و یک یک اکانت جدید ایجاد کنید، سپس در قسمت Channels و در ادامه مانند تصویر زیر New Channel، اقدام به ساخت یک چنل یا دشبورد کنید.

  • آموزش کامل راه‌اندازی دشبورد ThingSpeak در این لینک و آموزش مرجع موجود است.

 


دریافت API از ThingSpeak


در بخش API keys و در باکس مشخص شده می‌توانید API مورد نیاز برای پروژه را پیدا کنید، از این API در ادامه استفاده خواهیم کرد. این API پل ارتباطی بین سخت افزار ما و دشبورد ThingSpeak است که در دو نوع Write API و Read API وجود دارد که در این پروژه ما با استفاده نوع اول یعنی Write API مقادیر سنسور DHT11 را به سمت ThingSpeak ارسال خواهیم کرد و در مختصات های مشخص نمایش خواهیم داد. در ائامه داخل بخش مربوط به کد پروژه مشاهده می‌کنید که رشته ای در کد بانام apiKey مشخص شده است. عبارت Key دریافتی از این صفحه را بایستی داخل رشته apiKey در کد پروژه قرار دهید.

 


شماتیک و اتصالات


در این آموزش از ماژول SIM800 و برد nodemcu برپایه تراشه ESP8266 استفاده می‌کنیم. این ماژول از طریق ارتباط سریال با یکدیگر ارتباط برقرار می‌کنند، یعنی پین های RX و TX در ماژول SIM800. همچنین برای اندازه گیری دما از سنسور DHT11 نیز استفاده کرده‌ایم، که به یکی از پین های برد nodemcu متصل می‌شود. برای اندازه‌گیری بهتر از یک مقاومت بین پین های سیگنال و VCC سنسور DHT نیز استفاده خواهیم کرد. ماژول LM2596 همراه با یک جک پاور برای راه‌اندازی ماژول SIM کارایی دارد و روند کار پروژه را برای ما بسیار آسان خواهد کرد. همچنین در نهایت تمام اتصالات GND در پروژه باید به یکدیگر متصل باشند.

  • ابتدا اتصالات nodemcu و ماژول SIM800 را برقرار خواهیم کرد. همانطور که ذکر شد، پین های rx و tx از ماژول sim800 به پین های D3 و D2 در برد nodemcu متصل می‌شوند.

 

  • در ادامه نوبت به سنسور DHT21 و برد nodemcu می‌رسد، در این پروژه برای دریافت دیتای سنسور از پین D0 در ESP8266 استفاده می‌کنیم، همچنین بین پین های Vcc و سیگنال خروجی در سنسور DHT11، یک عدد مقاومت استفاده خواهیم کرد، برای بدست آوردن نتیجه بهتر در خروجی های سنسور. برای تغذیه سنسور از پین های ۳v3 و GND از برد nodemcu استفاده خواهیم کرد.

 

  • ماژول LM2596 دارای دو پین ورودی ولتاژ و دو پین خروجی برای ولتاژ است، از پایه های IN+ و IN- برای اتصال به آداپتور استفاده خواهیم کرد، و در نهایت دو پین OUT+ و OUT- به پین های تغذیه ماژول SIM800 ما متصل خواهند شد.
  • لطفا توجه داشته باشید که قبل از اتصال ماژول LM2596 به ماژول SIM800L، حتما ولتاژ آن را بر روی ۴٫۲ ولت تنظیم کنید. در صورتی که ولتاژ را قبل از اتصال به ماژول کاهش ندهید. احتمال آسیب دیدن ماژول SIM800L بسیار بالا خواهد بود.

 

  • در نهایت اتصالات این پروژه به شکل زیر خواهد بود. ماژول LM2596 برد SIM800 را تغذیه می‌کند، برد nodemcu با ماژول SIM800 در ارتباط است، و در نهایت دیتای سنسور DHT11 در برد ESP8266 تحلیل می‌شود.

 


کد و راه‌اندازی مدار


در این قسمت کد اتصال به دشبورد ThingSpeak با استفاده از اینترنت ماژول Sim800L و ارسال دما و رطوبت ماژول DHT11 را مشاهده می‌کند. این کد برای برد NODEMCU توسعه یافته است. اما تغیرات کوچکی میتوانید این کد را بر روی دیگر برد های مبتنی بر تراشه ESP8266 نیز آپلود کنید. ابتدا این کد را بر روی برد NODEMCU آپلود کنید. و سپس سایر ماژول هارا به آن متصل کنید. در این بخش API دریافتی از سایت Thingspeak را وارد می‌کنیم، این API مخصوص به دشبورد ساخته شده توسط شماست و نقش اصلی در برقراری ارتباط دشیورد با سخت افزار را دارد.

String apiKey = "G1K17M57O9V278DG";

 

این دوخط کد مربوط یه سیم کارتی است که استفاده می‌کنید و با توجه به این موضوع باید یک مورد را از کامنت دربیاورید.

const char apn[]  = "mci-net";  
// const char apn[]  = "mtnirancell";

 

در این قسمت با مقدار دهی به این خط کد GPRS ماژول را برای اتصال به اینترنت را‌ه‌اندازی میکنیم.

#define TINY_GSM_USE_GPRS true

 

کتابخانه tineyGSM انواع مازول های GSM را پشتیبانی می‌کند، پس در این قسمت باید نوع ماژول مورد استفاده را مشخص کنیم که در این مورد استفاده ماژول SIM800 است.

#define TINY_GSM_MODEM_SIM800

 

و در نهایت یکی از مهم ترین بخش هایی این پروژه که مربوط به برقراری اتصال با دشبور و ارسال درخواست های مورد نیاز است تا با ThingSpeak.com ارتیاط برقرار کند.

        client.print("POST /update HTTP/1.1\n");
        client.print("Host: api.thingspeak.com\n");
        client.print("Connection: close\n");        
        client.print(String("X-THINGSPEAKAPIKEY: " + apiKey + "\n"));
        client.print("Content-Type: application/x-www-form-urlencoded\n");
        client.print("Content-Length: ");
        client.print(postStr.length());
        client.print("\n\n");
        client.print(postStr);

 

کد کامل پروژه برقراری ارتباط با پلتفرم ThingSpeak به کمک ماژول SIM800L

#include <DHT.h>  // اضافه کردن کتابخانه سنسور دما و رطوبت به پروژه

#define DHTPIN 0  // انتخاب پایه مورد نظر برای اتصال سنسور دما و رطوبت
DHT dht(DHTPIN, DHT11);  // انتخاب نوع سنسور و معرفی پایه انتخاب شده به کتابخانه مربوط به سنسور دما و رطوبت

// Select your modem:
#define TINY_GSM_MODEM_SIM800  // انتخاب مودم مورد استفاده برای اتصال به اینترنت


// Set serial for debug console (to the Serial Monitor, default speed 115200)
#define SerialMon Serial  // نام گذاری پورت های سریال برای تشخیص راحت تر آن

// Software Serial 
#include <SoftwareSerial.h>  // اضافه کردن کتابخانه پورت سریال مجازی به پروژه
SoftwareSerial SerialAT(D2, D3);  // انتخاب پایه های پورت سریال مجازی
// D2 -> RX , D3 -> TX

// Increase RX buffer to capture the entire response  افزایش بافر برای گرفتن پاسخ کامل
// Chips without internal buffering (A6/A7, ESP8266, M590) تراشه های بدون بافر داخلی 
// need enough space in the buffer for the entire response  به فضای کافی در بافر برای کل پاسخ نیاز دارید
// else data will be lost (and the http library will fail).  در غیر اینصورت داده ها از بین می روند و کتابخانه از کار می افتد
#if !defined(TINY_GSM_RX_BUFFER)
#define TINY_GSM_RX_BUFFER 650
#endif

// Define the serial console for debug prints, if needed
#define TINY_GSM_DEBUG SerialMon  // در این قسمت پورت سریال مورد نظر برای دیباگ پروژه انتخاب شده است

// Define how you're planning to connect to the internet
#define TINY_GSM_USE_GPRS true  // در این قسمت استفاده از جی پی ار اس برای اتصا به اینترنت را انتخاب میکنم

// set GSM PIN, if any
#define GSM_PIN ""  // در صورتی که سیمکارت دارای پین است بایستی پین کد را در این قسمت وارد کنید

// Your GPRS credentials, if any  در این قسمت بایستی ای پی ان سیم کارت را انتخاب کنید
const char apn[]  = "mci-net";  // ای پی ان مربوط به سیم کارت های همراه اول
// const char apn[]  = "mtnirancell";  // درصورتی که از سیم کارت ایرانسل استفاده میکند این خظ را از کامنت خارج کرده و خط بالا را کامنت کنید
const char gprsUser[] = "";
const char gprsPass[] = "";

// Server details
const char server[] = "api.thingspeak.com";  // در این خط آدرس سرور مود نظر برای اتصال را انتخاب کنید
String apiKey = "G1K17M57O9V278DG";  // در این قسمت بایستی ادرس ای پی ای را وارد کنید.
const int  port = 80;

#include <TinyGsmClient.h>
#include <ArduinoHttpClient.h>


TinyGsm modem(SerialAT);  // در این خط سریال مورد استفاده برای ماژول جی اس ام به کتابخانه معرفی شده است


TinyGsmClient client(modem);
HttpClient http(client, server, port);

void setup() {
  
  dht.begin();  // برای فعال شدن سنسور دما و رطوبت نیاز است که ابتدا تنظیماتی انجام شود که با فراخوانی این تابع تنظیمات مورد نظر انجام خواهد شد.
  
 // Set console baud rate
  SerialMon.begin(115200);  // پورت سریال اصلی با باوردریت ۱۱۵۲۰۰ فعال شده است
  delay(10);

  // !!!!!!!!!!!
  // Set your reset, enable, power pins here
  // !!!!!!!!!!!

  SerialMon.println("Wait...");

  // Set GSM module baud rate
  SerialAT.begin(9600);  // پورت سریال مجازی متصل به ماژول جی اس ام با باودریت ۹۶۰۰  فعال شده است
  delay(6000);  // حداقل تاخیر مود نیاز برای وارد شدن ماژول جی اس ام به شبکه

  // Restart takes quite some time
  // To skip it, call init() instead of restart()
  SerialMon.println("Initializing modem...");
  modem.restart();  // در این قسمت ماژول جی اس ام یک بار ریست می شود در صورتی نیاز میتوانید این خط را کامنت کنید و خط زیر را از کامنت خارج کنید
  // modem.init();

  String modemInfo = modem.getModemInfo();  // این دستور اطلاعات موردم را در پورت سریال اصلی گزارش میدهد
  SerialMon.print("Modem Info: ");
  SerialMon.println(modemInfo);

#if TINY_GSM_USE_GPRS
  // Unlock your SIM card with a PIN if needed
  if ( GSM_PIN && modem.getSimStatus() != 3 ) {
    modem.simUnlock(GSM_PIN);  //  در صورتی که سیم کارت دارای پین کد باشد و پین کد به درستی به برنامه معرفی شده باشد این در قسمت اجازه استفاده از سیم کارت صادر می شود
  }
#endif

  SerialMon.print("Waiting for network...");
  if (!modem.waitForNetwork()) {  // در این قسمت وضعیت اتصال ماژول جی اسم ام به شبکه مورد بررسی قرار میگیرد
    SerialMon.println(" fail");
    delay(10000);
    return;
  }
  SerialMon.println(" success");

  if (modem.isNetworkConnected()) {
    SerialMon.println("Network connected");  
  }

#if TINY_GSM_USE_GPRS
  // GPRS connection parameters are usually set after network registration
    SerialMon.print(F("Connecting to "));
    SerialMon.print(apn);
    if (!modem.gprsConnect(apn, gprsUser, gprsPass))  // در این قسمت دستور اتصال به اینترنت به ماژول جی اس ام ارسال می شود
    {
      SerialMon.println(" fail");
      delay(10000);
      return;
    }
    SerialMon.println(" success");

    if (modem.isGprsConnected()) {
      SerialMon.println("GPRS connected");
    }
#endif
}
    
void loop() {
  
    float h = dht.readHumidity();      //دریافت مقادیر رطوبت و ذخیره
    float t = dht.readTemperature();    //دریافت مقادیر دما و ذخیره

    if (isnan(h) || isnan(t)){
        Serial.println("Failed to read from DHT sensor!");  //درصورت عدم تشخیص سنسور ارور نمایش داده شود
        return;
    }
    if (client.connect(server,80)){  //شروع برقراری ارتباط بر مبنای سرور و پورت مشخص شده
       
        String postStr = apiKey; 
        postStr +="&field1=";
        postStr += String(t);
        postStr +="&field2=";
        postStr += String(h);
        postStr += "\r\n\r\n";

        // شروع مراحل برقراری ارتباط با دشبورد                             
      
        client.print("POST /update HTTP/1.1\n");
        client.print("Host: api.thingspeak.com\n");
        client.print("Connection: close\n");        
        client.print(String("X-THINGSPEAKAPIKEY: " + apiKey + "\n"));
        client.print("Content-Type: application/x-www-form-urlencoded\n");
        client.print("Content-Length: ");
        client.print(postStr.length());
        client.print("\n\n");
        client.print(postStr);
 
        Serial.print("Temperature: "); 
        Serial.print(t);  //چاپ مقادیر دما در سریال مانیتور 
        Serial.print(" degrees Celcius, Humidity: ");
        Serial.print(h);    //چاپ مقادیر رطوبت در سریال مانیتور
        Serial.println("%. Send to Thingspeak.");
     }
     client.stop();   // توقف ارسال 
     delay(1000);
}

 


جمع بندی


در این آموزش همانطور که در ابتدای آن گفته شد. به مسئله ای پرداخته شد که ممکن است، همه ما با آن روبرو شده باشیم. مسئله ای که در این آموزش با آن رو برو هستیم در دسترس نبودن Wifi برای برقراری ارتباط با سرور های مثل دشبورد ThingSpeak است. روشی که در این آموزش برای رفع این مشکل پیشنهاد شده است، استفاده از GPRS ماژول SIM800L است. در ابتدای آموزش به معرفی ماژول SIM800L، برد NODEMCU، سنسور DHT11 و ماژول تغذیه LM2596 که قطعات مورد استفاده در این پروژه هستند، پرداخیتم. در ادامه اینترنت سیمکارت یا همان GPRS و پلتفرم اینترنت اشیاء ThingSpeak مورد بررسی قرار گرفت. سپس در قسمت شرح پروژه نحوه عملکر مدار توضیح داده شده است. پس از آن کتابخانه های مورد نیاز در پروژه معرفی شده و همچنین نحوه نصب آنها نیز توضیح داده شده است. سپس نحوه راه اندازی دشبورد ThingSpeak و دریافت API از این پلتفرم توضیح داده شده است. با برد ESP8266 و ماژول SIM800 توانستیم دمای محیط را در سریال مانیتور نرم‌افزار Arduino چاپ کنیم. همچنین بدلیل استفاده از برد ESP8266 توانستیم با سایت ThingSpeak ارتباط برقرار کنیم و اطلاعات در دشبورد IOT این سایت مانیتور کنیم. در آخر اتصالات و کد پروژه به همراه تحلیل کامل آن قرار داده شده است.

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

علی زاهدی

برنامه نویس و طراح سیستم های مبتنی بر میکروکنترلر

دانسته هایتان را مانند یک ساعت مچی در دست کنید، نه صرفا به این خاطر که نشان دهید آن را دارید. بلکه به این خاطر که اگر کسی از شما ساعت را پرسید، برایش بگویید.
لرد چسترفیلد

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

CiferTech

تبادل نظر و رفع عیب با ثبت دیدگاه

۲۴ دیدگاه

  • سلام مهندس تشکر از آموزش شما
    میخواستم بپرسم که آیا ماژول دوربین رزبری پای که درگاه اون CSI است به ESP32CAM متصل میشه؟

    • با سلام، ممنون از توجه شما.
      خیر این دوربین با برد ESP32-CAM قابل راه‌اندازی نیست اما دوربین های متفاوتی برای این برد موجود است.

  • من هر کاری میکنم هم سنسور و هم ماژول fail میشه
    اینا نوشته های سریال
    Initializing modem…
    [۶۰۸۰] ### TinyGSM Version: 0.10.9
    [۶۰۸۰] ### TinyGSM Compiled Module: TinyGsmClientSIM800
    Modem Info:
    Waiting for network… fail
    Failed to read from DHT sensor!

    • باسلام
      اتصالات را بار دیگر با دقت بررسی کنید. با توجه به ارور ماژول DHT11 به درستی متصل نشده است. و همچنین اطمینان حاصل فرمایید که ماژول Sim800L وارد شبکه می شود.

  • سلام و عرض ادب
    در سریال مانیتور که چک می کنم پس از چند اعلان پیام های خطوط ۹۱ و ۹۳ موجود در کدها نوشته می شود و برنامه دیگه پیش نمیره. ماژول sim 800 هر سه ثانیه چشمک میزنه و مشخصه که شبکه رو پیدا کرده.
    البته این کدها رو من روی uno ریختم و به جای ماژول دما ماژول gps گذاشتم و عرض و طول جغرافیایی رو با کتابخانه tinygps+ بیرون کشیدم و می خوام بفرستم thingspeak

  • سلام وقتتون بخیر، ممنون از مطالب خوبتون
    من یه برنامه با همین esp8266 و sim800l نوشتم که ماژول سیمکارت به esp وصل میشه و با پیامک led رو کنترل میکنه، یه مشکلی که برام پیش اومده اینه که وقتی برنامه رو اپلود میکنم رو esp، بعد اپلود چراغ ابی رنگ یکسره روشن میشه و برنامه هم کار نمیکنه، همین برنامه رو با اردوینوuno جواب گرفتم،
    اگر امکانش هست راهنماییم کنید، ممنون

    • با سلام
      بررسی کنید آیا ماژول ESP سالم است یا خیر؟ اینکه LED سیگنال ثابت است میتواند نشانگر آسیب دیدن ماژول باشد و یا اینکه firmware ماژول دچار مشکل شده باشد!

  • سلام مهندس دو تا سوال خدمتتون داشتم
    ۱- برای این پروژه باید firmware ماژول sim800L رو تغییر بدیم و آپدیت کنیم؟
    ۲- برای اینکه همین دیتا رو به یک ارائه دهنده سرویس mqtt ایرانی فرستاد باید چه تغییراتی در کد داد؟

    • با سلام
      موارد زیر را بررسی کنید و در ادامه همین کامنت نتیجه را اعلام کنیم.
      ۱- تغذیه اعمال شده به ماژول شامل ولتاژ و جریان منبع تغذیه
      ۲- آنتن دهی ماژول به کمک دستور AT+CSQ=؟ را بررسی کنید.
      ۳- وضعیت سیم کارت شامل اینکه کد نداشته باشد.

  • با سلام
    من یک RTU با ترکیب ماژول های sim800l و esp32 درست کردم که با gprs یک متن مشخص رو به یک سرور ارسال کنه اتفاقی اکه افتاده اینه که یا خطاهای سری ۶۰۰ بخصوص ۶۰۳ بر می گرده یا تعداد کاراکترهای ارسالی بر میگردد (HTTPREAD) این تغییرپاسخ نتیجه تغییر طول متن هستند
    متن کد هم می تونم ارسال کنم

    • با سلام
      از روش‌های دیگری برای ارسال داده‌ها مانند استفاده از TCP یا UDP بجای HTTP استفاده کنید. سپس نتیجه را اطلاع رسانی کنید.
      همچنین مطمئن شوید که پارامترهای اتصال از جمله آدرس سرور، پورت، پروتکل و مسیر درستی را برای ارسال داده‌ها به سرور استفاده می‌کنید.

  • سلام
    با تشکر از آموزش بسیار جامع و کامل .
    من دو ساله که از سایت thingspeak استفاده میکنم
    الان چند مدته که توی سایت نمیره ، مشکل داره ؟ روش جایگزینی هست ؟
    متشکرم

  • سلام من میخواستم ببینم امکانش هست با استفاده از ماژول Sim800l کامپیوترم رو به اینترنت متصل کنم یا نه چون قبلا آموزش اتصال رزبری پای رو به اینترنت دیده بودم
    اگر امکانش هست میشه لطفا آموزشش رو بهمون بدید
    ممنون