شِفر (کود) جستجو

استفاده از ESP32 به عنوان یک کلاینت HTTP برای ارسال اطلاعات از طریق WiFi به یک سرور راه دور

استفاده از ESP32 به عنوان یک کلاینت HTTP برای ارسال اطلاعات از طریق WiFi به یک سرور راه دور

در این آموزش، ما به بررسی چگونگی استفاده از میکروکنترلر ESP32 به عنوان یک مشتری HTTP برای ارسال داده به یک سرور از راه دور از طریق WiFi خواهیم پرداخت. ESP32 یک بورد توسعه قدرتمند است که قابلیت‌های WiFi و بلوتوث را ترکیب می‌کند و آن را برای برنامه‌های IoT ایده‌آل می‌سازد. در پایان این آموزش، شما قادر خواهید بود درخواست‌های HTTP را با پارامترهای تعریف شده توسط کاربر ارسال کرده و پاسخ‌ها را از سرور دریافت کنید.

ESP32-38pin-1

ما از محیط برنامه‌نویسی آردوینو برای برنامه‌نویسی ESP32 استفاده خواهیم کرد و من شما را در مراحل لازم برای راه‌اندازی محیطتان راهنمایی می‌کنم. برای یک راهنمای تصویری، توصیه می‌کنم ویدیوی مرتبط را مشاهده کنید (در ویدیو در :00).

توضیح سخت‌افزار

عنصر اصلی در این پروژه میکروکنترلر ESP32 است، به‌ویژه ماجیول WROOM32. این ماجیول دارای ۳۸ پایه است که می‌توان از آن‌ها برای عملیات ورودی/خروجی مختلف استفاده کرد. این ماجیول در ولتاژ ۳.۳ ولت کار می‌کند و شامل قابلیت‌های WiFi و Bluetooth داخلی است. ESP32 چندمنظوره است و به لطف پایه‌های GPIO و پروتکل‌های ارتباطی‌اش می‌توان از آن در کاربردهای زیادی استفاده کرد.

ESP32-3

علاوه بر ESP32، شما ممکن است به یک مبدل USB به سریال برای برنامه‌نویسی و اشکال‌زدایی نیاز داشته باشید. ماجیول همچنین دارای یک رگولاتور ولتاژ است که اطمینان می‌دهد میکروکنترلر از یک منبع ولتاژ بالاتر، منبع تغذیه پایدار ۳.۳ ولت دریافت کند. به طور کلی، ESP32 یک میکروکنترلر خوب مجهز است که برای پروژه‌های مختلف مناسب است.

جزئیات برگه داده

سازنده سیستم‌های اصرسیف
شماره قطعه ESP32-WROOM-32
ولتاژ منطقی/ورودی-خروجی ۳.۳ ولت
ولتاژ تأمین ۵ ولت (حداکثر)
جریان خروجی (به ازای هر کانال) ۱۲ میلی آمپر
جریان اوج (به ازای هر کانال) ۱۶۰ میلی آمپر
راهنمایی فرکانس PWM ۱ کیلوهرتز
آستانه‌های منطق ورودی 0.3 * VDDپایین، 0.7 * VDD(بالا)
افت ولتاژ / RDS(on)/ اشباع 0.5 ولت
محدودیت‌های حرارتی ۱۲۵ درجه سانتی‌گراد
بسته QFN
یادداشت‌ها / انواع چندین اندازه فلاش موجود است
ESP32-2
  • تضمین سطوح ولتاژ صحیح (3.3V) برای جلوگیری از آسیب رسیدن به ESP32.
  • از خازن‌های دی‌کوپلینگ مناسب در نزدیکی پایه‌های تأمین انرژی برای عملکرد پایدار استفاده کنید.
  • اگر ماجیول در نزدیکی بالاترین محدوده‌های جریانی خود عمل می‌کند، یک سیستم جذب حرارت را پیاده‌سازی کنید.
  • از WiFi داخلی ESP32 برای اتصال آسان به شبکه استفاده کنید.
  • در تنظیمات پایه‌های GPIO احتیاط کنید تا از بروز اتصال کوتاه جلوگیری شود.
  • با طرح‌های ساده کار کنید تا عملکرد را قبل از ادغام‌های پیچیده تأیید کنید.

دستورالعمل‌های اتصال

برای اتصالات ESP32 برای این پروژه، با اتصال پایه زمین ESP32 به زمین منبع تغذیه خود شروع کنید. سپس منبع تغذیه ۵ ولت را به پایه Vin یا V5 روی ESP32 متصل کنید، که ولتاژ داخلی رگولاتور را تأمین کرده و ۳.۳ ولت را به میکروکنترلر ارائه می‌دهد.

برای عملکرد کلاینت HTTP، اطمینان حاصل کنید که ESP32 شما به یک شبکه WiFi متصل است. شما باید پایه‌های مناسب را برای هر گونه قطعه اضافی که ممکن است استفاده کنید، مانند سنسورها یا LEDها، متصل کنید. به عنوان مثال، یک LED را به پایه GPIO 2 متصل کنید، با یک مقاومت در سری برای محدود کردن جریان. پای بلندتر (آند) LED باید به پایه 2 متصل شود، در حالی که پای کوتاه‌تر (کاتد) به زمین متصل می‌شود.

نمونه‌های شِفر (کود) و راهنمایی

در قطعه شِفر (کود) ارائه‌شده، ما کلاینت HTTP را راه‌اندازی کرده و شناسه‌های کلیدی مانندmainURL، که آدرس اینترنتی را که ما در حال ارسال درخواست به آن هستیم، نگه می‌دارد وuser، که شامل اطلاعات کاربر است. این شِفر (کود) همچنین ESP32 را برای اتصال به یک شبکه WiFi مشخص تنظیم می‌کند.

String mainURL ="http://ddas.cc/httpTest/?";
String user="user=ahmad22";

اینجا،mainURLهدف ما این نقطه انتهایی است که به آن می‌پردازیم، در حالی کهuserاین پارامتر کاربر را که در درخواست HTTP ارسال خواهد شد، نگه‌می‌دارد.

درsetup()تابع، ما ارتباط سری را آغاز کرده و اتصال WiFi را راه‌اندازی می‌کنیم. همچنین با ایجاد یک نمونه از کلاینت HTTP، برای درخواست HTTP آماده می‌شویم.

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("Robojax", "Your password");
}

این بخش نمایشگر مسلسل را برای اشکال‌زدایی راه‌اندازی کرده و به شبکه WiFi متصل می‌شود. اطلاعات کاربری در تشریح شده است.addAP()روش.

متن:loop()در این تابع، اتصال موفق WiFi را بررسی می‌کنیم و به ارسال درخواست HTTP GET می‌پردازیم. پارامترها شامل مقادیر کاربر و دما هستند.

if (http.begin(client, mainURL+user+"&temp="+temperature+"&type="+type)) {
  int httpCode = http.GET();}

این شِفر (کود) URL کامل را با پارامترهای جستجو می‌سازد و درخواست GET را اجرا می‌کند. اگر موفقیت‌آمیز باشد، پاسخ سرور را دریافت می‌کند.

نمایش / چه انتظاری داشته باشید

زمانی که ESP32 روشن می‌شود و برنامه اجرا می‌شود، باید به شبکه WiFi مشخص شده متصل شود و یک درخواست GET HTTP به سرور ارسال کند. می‌توانید خروجی را در نمایشگر مسلسل مشاهده کنید، جایی که شِفر (کود) وضعیت HTTP و بار پاسخ از سرور را خواهید دید. مشکلات رایج ممکن است شامل اعتبارنامه‌های نادرست WiFi یا سرور غیرقابل دسترس باشد (در ویدیو در ساعت ۱۲:۳۰).

برچسب‌های زمانی ویدیو

  • ۰۰:۰۰ شروع
  • ۰۰:۵۳ مقدمه
  • پایه‌های 5V و 3.3V
  • 08:38 ویژگی‌ها توضیح داده شد
  • ۱۴:۰۳ پایه‌ها روی دیتاشیت
  • 17:00 مثال بلینک
  • مثال چشمک زدن با LED خارجی :14
  • ۲۱:۰۰ امتحان کلاینت HTTP

تصاویر

ESP32-1
ESP32-1
ESP32-2
ESP32-2
ESP32-3
ESP32-3
ESP32-38pin-1
ESP32-38pin-1
ESP32-38pin-2
ESP32-38pin-2
241-ESP32 HTTP Client code example
زبان: C++
/*
 * ESP32 HTTP Client example
 * This example is part of Introduction to ESP32 WiFi, Bluetooth Microcontroller board
📚⬇️ Download and resource page https://robojax.com/RJT211
watch full video https://youtu.be/--Fj8QDlGuQ
 * 
 * Updated/Written by Ahmad Shamshiri 
 * On August 25, 2019 in Ajax, Ontario, Canada
 * Watch video instruction for this code:
 * https://youtu.be/--Fj8QDlGuQ
 * 
 * 
 Get this code and other Arduino codes from Robojax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place. 

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

or make a donation using PayPal http://robojax.com/L/?id=64

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>

#include <WiFiClient.h>

ESP8266WiFiMulti WiFiMulti;
String mainURL ="http://ddas.cc/httpTest/?";
String user="user=ahmad22";
float temperature=45.3;
char type='j';

void setup() {

  Serial.begin(115200);
  // Serial.setDebugOutput(true);

  Serial.println();
  Serial.println();
  Serial.println();

  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("Robojax", "YOur password");

}

void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {

    WiFiClient client;

    HTTPClient http;

    Serial.print("[HTTP] begin...\n");
    if (http.begin(client, mainURL+user+"&temp="+temperature+"&type="+type)) {  // HTTP


      Serial.print("[HTTP] GET...\n");
      // start connection and send HTTP header
      int httpCode = http.GET();

      // httpCode will be negative on error
      if (httpCode > 0) {
        // HTTP header has been send and Server response header has been handled
        Serial.printf("[HTTP] GET... code: %d\n", httpCode);

        // file found at server
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = http.getString();
          Serial.println(payload);
        }
      } else {
        Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
      }

      http.end();
    } else {
      Serial.printf("[HTTP} Unable to connect\n");
    }
  }

  delay(10000);
}

مواردی که ممکن است به آن‌ها نیاز داشته باشید

منابع و مراجع

فایل‌ها📁

برگه مشخصات (pdf)