فهرست مطالب:
- تدارکات
- مرحله 1: کتابخانه
- مرحله 2: Pinout
- مرحله 3: پین AUX
- مرحله 4: طرحواره کاملاً متصل Esp8266
- مرحله 5: طرحواره کاملاً متصل به آردوینو
- مرحله 6: کتابخانه: سازنده
- مرحله 7: شروع کنید
- مرحله 8: پیکربندی و روش اطلاعات
- مرحله 9: ظرف پاسخگو
- مرحله 10: گزینه اصلی پیکربندی
- مرحله 11: ارسال پیام دریافت
- مرحله 12: حالت انتقال معمولی
- مرحله 13: مدیریت ساختار
- مرحله 14: حالت ثابت به جای حالت عادی
- مرحله 15: با تشکر
تصویری: ارتباط بی سیم LoRa 3 کیلومتر تا 8 کیلومتر با هزینه کم E32 (sx1278/sx1276) دستگاه Arduino ، Esp8266 یا Esp32: 15 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:52
من یک کتابخانه برای مدیریت EBYTE E32 بر اساس سری Semtech دستگاه LoRa ، دستگاه بسیار قدرتمند ، ساده و ارزان قیمت ایجاد می کنم.
شما می توانید نسخه 3Km را در اینجا ، نسخه 8Km را در اینجا پیدا کنید
آنها می توانند در فاصله 3000 تا 8000 متر کار کنند و ویژگی ها و پارامترهای زیادی دارند. بنابراین من این کتابخانه را برای ساده سازی استفاده ایجاد می کنم.
این یک راه حل برای بازیابی اطلاعات از سنسورهای کلان شهر یا کنترل هواپیماهای بدون سرنشین است.
تدارکات
آردوینو UNO
Wemos D1 mini
نسخه LoRa E32 TTL 100 3Km
نسخه LoRa E32 TTL 1W 8Km
مرحله 1: کتابخانه
کتابخانه من را اینجا می توانید پیدا کنید.
بارگذاری.
روی دکمه DOWNLOADS در گوشه بالا سمت راست کلیک کنید ، نام پوشه فشرده نشده LoRa_E32 را تغییر دهید.
بررسی کنید که پوشه LoRa_E32 حاوی LoRa_E32.cpp و LoRa_E32.h باشد.
پوشه کتابخانه LoRa_E32 را در پوشه / libraries / خود قرار دهید. در صورتی که اولین کتابخانه شما باشد ، باید پوشه فرعی کتابخانه ها را ایجاد کنید.
IDE را راه اندازی مجدد کنید.
مرحله 2: Pinout
همانطور که می بینید می توانید حالت های مختلف را از طریق پین های M0 و M1 تنظیم کنید.
برخی از پین ها وجود دارند که می توانند به صورت ایستا مورد استفاده قرار گیرند ، اما اگر آن را به میکروکنترلر متصل کرده و آنها را در کتابخانه پیکربندی کنید ، عملکرد خود را افزایش می دهید و می توانید تمام حالت را از طریق نرم افزار کنترل کنید ، اما ما بعداً بهتر توضیح خواهیم داد.
مرحله 3: پین AUX
همانطور که قبلاً گفتم مهم نیست که همه پین ها را به خروجی میکروکنترلر متصل کنید ، می توانید پین های M0 و M1 را روی HIGH یا LOW قرار دهید تا پیکربندی مورد نظر شما به دست آید ، و اگر AUX را وصل نکنید ، کتابخانه برای اطمینان یک تأخیر منطقی تعیین می کند. که عملیات کامل است
پین AUX
هنگام انتقال داده ها می توان برای بیدار کردن MCU خارجی و بازگشت بالا در پایان انتقال داده استفاده کرد.
هنگام دریافت AUX LOW و بازگشت بالا هنگامی که بافر خالی است.
همچنین برای بازگرداندن خودکار به حالت عادی (در حالت روشن/خاموش/حالت برنامه/برنامه) استفاده می شود.
مرحله 4: طرحواره کاملاً متصل Esp8266
طرح اتصال esp8266 ساده تر است زیرا در همان ولتاژ ارتباطات منطقی (3.3v) کار می کند.
برای به دست آوردن ثبات خوب ، افزودن مقاومت کششی (4 ، 7 کیلو اهم) بسیار مهم است.
مرحله 5: طرحواره کاملاً متصل به آردوینو
ولتاژ کار آردوینو 5 ولت است ، بنابراین برای جلوگیری از آسیب ، ما باید یک تقسیم کننده ولتاژ را در پین RX M0 و M1 ماژول LoRa اضافه کنیم ، در اینجا می توانید اطلاعات بیشتری را دریافت کنید تقسیم ولتاژ: ماشین حساب و برنامه کاربردی.
می توانید از مقاومت 2 کیلو اهم به GND و 1 کیلو اهم از سیگنال استفاده کنید تا روی RX قرار داده شود.
مرحله 6: کتابخانه: سازنده
من مجموعه ای از سازندگان بسیار متعدد تهیه کردم ، زیرا ما می توانیم گزینه ها و موقعیت های بیشتری برای مدیریت داشته باشیم.
LoRa_E32 (بایت rxPin ، بایت txPin ، UART_BPS_RATE bpsRate = UART_BPS_RATE_9600) ؛
LoRa_E32 (بایت rxPin ، بایت txPin ، بایت auxPin ، UART_BPS_RATE bpsRate = UART_BPS_RATE_9600) ؛ LoRa_E32 (بایت rxPin ، بایت txPin ، بایت auxPin ، بایت m0Pin ، بایت m1Pin ، UART_BPS_RATE bpsRate = UART_BPS_RATE_9600) ؛
اولین مجموعه سازنده برای تفویض مدیریت سریال و سایر پین ها به کتابخانه ایجاد می شود.
rxPin و txPin پین اتصال به UART هستند و اجباری هستند.
auxPin یک پین است که عملکرد ، انتقال و وضعیت دریافت را بررسی می کند (در ادامه بهتر توضیح خواهیم داد) ، آن پین اجباری نیست ، اگر آن را تنظیم نکنید ، من یک تاخیر اعمال می کنم تا عملیات به پایان برسد (با تأخیر)
m0pin و m1Pin پین هایی هستند که عملکرد MODE را تغییر می دهند (به جدول بالا مراجعه کنید) ، من فکر می کنم این پین ها در "تولید" مستقیماً به صورت HIGH یا LOW به هم متصل می شوند ، اما برای آزمایش مفید است که توسط کتابخانه مدیریت شوند.
bpsRate حجم نرم افزاری نرم افزار است معمولاً سریال 9600 است (تنها نرخ باود در حالت برنامه/خواب)
یک مثال ساده این است
#شامل "LoRa_E32.h" LoRa_E32 e32ttl100 (2 ، 3) ؛ // RX ، TX // LoRa_E32 e32ttl100 (2 ، 3 ، 5 ، 6 ، 7) ؛ // RX ، TX
ما می توانیم مستقیماً از SoftwareSerial با سازنده دیگری استفاده کنیم
LoRa_E32 (سریال HardwareSerial* ، UART_BPS_RATE bpsRate = UART_BPS_RATE_9600) ؛
LoRa_E32 (سریال HardwareSerial* ، byte auxPin ، UART_BPS_RATE bpsRate = UART_BPS_RATE_9600) ؛
LoRa_E32 (سریال سخت افزار* ، بایت auxPin ، بایت m0Pin ، بایت m1Pin ، UART_BPS_RATE bpsRate = UART_BPS_RATE_9600) ؛
مثال بالا با این سازنده می تواند مانند این باشد.
#شامل #شامل "LoRa_E32.h"
SoftwareSerial mySerial (2 ، 3) ؛ // RX ، TX
LoRa_E32 e32ttl100 (& mySerial) ؛
// LoRa_E32 e32ttl100 (& mySerial ، 5 ، 7 ، 6) ؛
آخرین مجموعه سازنده اجازه استفاده از HardwareSerial به جای SoftwareSerial است.
LoRa_E32 (سریال SoftwareSerial* ، UART_BPS_RATE bpsRate = UART_BPS_RATE_9600) ؛
LoRa_E32 (سریال SoftwareSerial* ، byte auxPin ، UART_BPS_RATE bpsRate = UART_BPS_RATE_9600) ؛
LoRa_E32 (سریال SoftwareSerial* ، بایت auxPin ، بایت m0Pin ، بایت m1Pin ، UART_BPS_RATE bpsRate = UART_BPS_RATE_9600) ؛
مرحله 7: شروع کنید
دستور شروع برای راه اندازی سریال و پین در حالت ورودی و خروجی استفاده می شود.
void begin ()؛
در اجرا است
// راه اندازی همه پین ها و UART
e32ttl100.begin ()؛
مرحله 8: پیکربندی و روش اطلاعات
مجموعه ای از روش ها برای مدیریت پیکربندی و دریافت اطلاعات دستگاه وجود دارد.
ResponseStructContainer getConfiguration ()؛
ResponseStatus setConfiguration (پیکربندی پیکربندی ، PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE) ؛
ResponseStructContainer getModuleInformation ()؛
void printParameters (پیکربندی ساختار پیکربندی) ؛
ResponseStatus resetModule ()؛
مرحله 9: ظرف پاسخگو
برای ساده سازی مدیریت پاسخ ، من مجموعه ای از ظرف را ایجاد می کنم ، برای مدیریت بسیار مفید خطاها و بازگشت داده های عمومی.
وضعیت پاسخ
این یک محفظه وضعیت است و دارای 2 نقطه ورود ساده است ، با این کار می توانید کد وضعیت و توضیحات کد وضعیت را دریافت کنید
Serial.println (c.getResponseDescription ()) ؛ // توضیحات کد
Serial.println (کد c) ؛ // 1 در صورت موفقیت
کد هستند
موفقیت = 1 ،
ERR_UNKNOWN ،
ERR_NOT_SUPPORT ،
ERR_NOT_IMPLEMENT ،
ERR_NOT_INITIAL ،
ERR_INVALID_PARAM ،
ERR_DATA_SIZE_NOT_MATCH ،
ERR_BUF_TOO_SMALL ،
ERR_TIMEOUT ،
ERR_HARDWARE ،
ERR_HEAD_NOT_RECOGNIZED
ResponseContainer
این ظرف برای مدیریت پاسخ String ایجاد شده است و دارای 2 نقطه ورود است.
داده با رشته از پیام و وضعیت به عنوان نمونه ای از RepsonseStatus بازگردانده می شود.
ResponseContainer rs = e32ttl.receiveMessage ()؛
پیام رشته = rs.data؛
Serial.println (rs.status.getResponseDescription ()) ؛
Serial.println (پیام) ؛
ResponseStructContainer
این محفظه "پیچیده تر" است ، من از آن برای مدیریت ساختار استفاده می کنم ، همان نقطه ورود ResponseContainer را دارد اما داده ها یک اشاره گر خالی برای مدیریت ساختار پیچیده هستند.
ResponseStructContainer c؛
c = e32ttl100.getConfiguration ()؛ // دریافت نشانگر پیکربندی قبل از سایر عملیات مهم است
پیکربندی پیکربندی = *(پیکربندی *) c.data؛
Serial.println (c.status.getResponseDescription ()) ؛
Serial.println (c.status.code) ؛
getConfiguration و setConfiguration
اولین روش getConfiguration است ، می توانید از آن برای بازیابی تمام داده های ذخیره شده روی دستگاه استفاده کنید.
ResponseStructContainer getConfiguration ()؛
در اینجا یک مثال استفاده می شود.
ResponseStructContainer c؛
c = e32ttl100.getConfiguration ()؛ // دریافت نشانگر پیکربندی قبل از سایر عملیات مهم است
پیکربندی پیکربندی = *(پیکربندی *) c.data؛
Serial.println (c.status.getResponseDescription ()) ؛
Serial.println (c.status.code) ؛
Serial.println (configuration. SPED.getUARTBaudRate ()) ؛
ساختار پیکربندی همه داده های تنظیمات را دارد و من یک سری تابع برای دریافت همه توضیحات تک داده اضافه می کنم.
configuration. ADDL = 0x0؛ // قسمت اول آدرس پیکربندی. ADDH = 0x1؛ // قسمت دوم پیکربندی آدرس. CHAN = 0x19؛ // پیکربندی کانال. OPTION.fec = FEC_0_OFF؛ // پیکربندی سوئیچ تصحیح خطا به جلو. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION؛ // تنظیمات حالت انتقال. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS ؛ // تنظیمات پیکربندی مدیریت. OPTION.transmissionPower = POWER_17؛ // پیکربندی قدرت انتقال dBm. OPTION.wirelessWakeupTime = WAKE_UP_1250؛ // زمان منتظر بمانید تا پیکربندی بیدار شود. SPED.airDataRate = AIR_DATA_RATE_011_48؛ // پیکربندی نرخ داده هوا. SPED.uartBaudRate = UART_BPS_115200؛ // ارتباط سرعت تنظیمات configuration. SPED.uartParity = MODE_00_8N1؛ // بیت برابری
برای به دست آوردن همه توضیحات ، تابع معادل همه ویژگی ها را دارید:
Serial.print (F ("چان:")) ؛ Serial.print (configuration. CHAN، DEC) ؛ Serial.print (" ->")؛ Serial.println (configuration.getChannelDescription ()) ؛ Serial.println (F ("")) ؛ Serial.print (F ("SpeedParityBit:")) ؛ Serial.print (configuration. SPED.uartParity، BIN)؛ Serial.print (" ->")؛ Serial.println (configuration. SPED.getUARTParityDescription ()) ؛ Serial.print (F ("SpeedUARTDatte:")) ؛ Serial.print (configuration. SPED.uartBaudRate ، BIN) ؛ Serial.print (" ->") ؛ Serial.println (configuration. SPED.getUARTBaudRate ()) ؛ Serial.print (F ("SpeedAirDataRate:")) ؛ Serial.print (configuration. SPED.airDataRate ، BIN) ؛ Serial.print (" ->") ؛ Serial.println (configuration. SPED.getAirDataRate ()) ؛ Serial.print (F ("OptionTrans:")) ؛ Serial.print (configuration. OPTION.fixedTransmission ، BIN) ؛ Serial.print (" ->") ؛ Serial.println (configuration. OPTION.getFixedTransmissionDescription ()) ؛ Serial.print (F ("OptionPullup:")) ؛ Serial.print (configuration. OPTION.ioDriveMode ، BIN) ؛ Serial.print (" ->") ؛ Serial.println (configuration. OPTION.getIODroveModeDescription ()) ؛ Serial.print (F ("OptionWakeup:")) ؛ Serial.print (configuration. OPTION.wirelessWakeupTime ، BIN) ؛ Serial.print (" ->") ؛ Serial.println (configuration. OPTION.getWirelessWakeUPTimeDescription ()) ؛ Serial.print (F ("OptionFEC:")) ؛ Serial.print (configuration. OPTION.fec، BIN)؛ Serial.print (" ->")؛ Serial.println (configuration. OPTION.getFECDescription ()) ؛ Serial.print (F ("OptionPower:")) ؛ Serial.print (configuration. OPTION.transmissionPower، BIN)؛ Serial.print (" ->")؛ Serial.println (configuration. OPTION.getTransmissionPowerDescription ()) ؛
به همین ترتیب setConfiguration یک ساختار پیکربندی می خواهد ، بنابراین من فکر می کنم راه بهتر برای مدیریت پیکربندی بازیابی حالت فعلی ، اعمال تنها تغییر مورد نیاز و تنظیم مجدد آن است.
ResponseStatus setConfiguration (پیکربندی پیکربندی ، PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE) ؛
پیکربندی به طور پیش فرض نشان می دهد ، saveType به شما اجازه می دهد تا در صورت تغییر دائمی فقط برای جلسه فعلی ، انتخاب کنید.
ResponseStructContainer c؛ c = e32ttl100.getConfiguration ()؛ // مهم است که اشاره گر پیکربندی را قبل از سایر عملیات دریافت کنید پیکربندی پیکربندی = *(پیکربندی *) c.data؛ Serial.println (c.status.getResponseDescription ()) ؛ Serial.println (c.status.code) ؛ printParameters (پیکربندی) ؛ configuration. ADDL = 0x0؛ configuration. ADDH = 0x1؛ configuration. CHAN = 0x19؛ configuration. OPTION.fec = FEC_0_OFF؛ configuration. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION؛ configuration. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS ؛ configuration. OPTION.transmissionPower = POWER_17؛ configuration. OPTION.wirelessWakeupTime = WAKE_UP_1250؛ configuration. SPED.airDataRate = AIR_DATA_RATE_011_48؛ configuration. SPED.uartBaudRate = UART_BPS_115200؛ configuration. SPED.uartParity = MODE_00_8N1؛ // تنظیمات پیکربندی تغییر کرده و تنظیم شده است که پیکربندی ResponseStatus rs = e32ttl100.setConfiguration را نگه ندارد (پیکربندی ، WRITE_CFG_PWR_DWN_LOSE) ؛ Serial.println (rs.getResponseDescription ()) ؛ Serial.println (rs.code) ؛ printParameters (پیکربندی) ؛
همه پارامترها بصورت ثابت مدیریت می شوند:
مرحله 10: گزینه اصلی پیکربندی
مرحله 11: ارسال پیام دریافت
ابتدا باید یک روش ساده اما مفید را برای بررسی اینکه آیا چیزی در بافر دریافت کننده وجود دارد ، معرفی کنیم
int در دسترس ()؛
به سادگی تعداد بایت های موجود در جریان فعلی را برمی گرداند.
مرحله 12: حالت انتقال معمولی
حالت انتقال معمولی/شفاف برای ارسال پیام به همه دستگاه ها با آدرس و کانال یکسان استفاده می شود.
روشهای زیادی برای ارسال/دریافت پیام وجود دارد ، ما قصد داریم به تفصیل توضیح دهیم:
ResponseStatus sendMessage (پیام رشته ای const) ؛
ResponseContainer ReceMessage ()؛
روش اول sendMessage است و برای ارسال String به دستگاه در حالت عادی استفاده می شود.
ResponseStatus rs = e32ttl.sendMessage ("Prova") ؛ Serial.println (rs.getResponseDescription ()) ؛
دستگاه دیگر به سادگی در حلقه انجام دهید
if (e32ttl.available ()> 1) {ResponseContainer rs = e32ttl.receiveMessage ()؛ پیام رشته = rs.data؛ // ابتدا اطلاعات Serial.println (rs.status.getResponseDescription ()) را دریافت کنید؛ Serial.println (پیام) ؛ }
مرحله 13: مدیریت ساختار
اگر می خواهید یک ساختار پیچیده ارسال کنید ، می توانید از این روش استفاده کنید
ResponseStatus sendMessage (const void *message، const uint8_t size) ؛ ResponseStructContainer دریافتMessage (اندازه const uint8_t) ؛
برای ارسال strucutre استفاده می شود ، به عنوان مثال:
struct Messaggione {نوع char [5]؛ پیام char [8]؛ bool mitico؛ }؛ struct Messaggione messaggione = {"TEMP"، "Peple"، true}؛ ResponseStatus rs = e32ttl.sendMessage (& messaggione، sizeof (Messaggione))؛ Serial.println (rs.getResponseDescription ()) ؛
و از طرف دیگر می توانید پیام را دریافت کنید تا
ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)) ؛ struct Messaggione messaggione = *(Messaggione *) rsc.data ؛ Serial.println (messaggione.message) ؛ Serial.println (messaggione.mitico) ؛
ساختار جزئی را بخوانید
اگر می خواهید قسمت اول پیام را برای مدیریت نوع بیشتری از strucutre بخوانید ، می توانید از این روش استفاده کنید.
ResponseContainer ReceInitialMessage (اندازه const uint8_t) ؛
من آن را برای دریافت یک رشته با نوع یا دیگر برای شناسایی ساختار مورد نظر برای بارگیری ایجاد می کنم.
struct Messaggione {// strucutre جزئی بدون پیام typechar [8]؛ bool mitico؛ }؛ نوع char [5]؛ // قسمت اول ساختار ResponseContainer rs = e32ttl.receiveInitialMessage (sizeof (نوع)) ؛ // رشته را در یک آرایه char (لازم نیست) memcpy (نوع ، rs.data.c_str () ، sizeof (نوع)) قرار دهید. Serial.println ("نوع خواندن:") ؛ Serial.println (rs.status.getResponseDescription ())؛ Serial.println (نوع) ؛ // بقیه ساختار ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)) را بخوانید ؛ struct Messaggione messaggione = *(Messaggione *) rsc.data؛
مرحله 14: حالت ثابت به جای حالت عادی
به همین ترتیب مجموعه ای از روش ها را برای استفاده در انتقال ثابت ایجاد می کنم
انتقال ثابت
شما فقط باید روش ارسال را تغییر دهید ، زیرا دستگاه مقصد مقدمه آدرس و کانال quando settato il fixed mode را دریافت نمی کند.
بنابراین برای پیام رشته شما دارید
ResponseStatus sendFixedMessage (بایت ADDL ، بایت ADDH ، بایت CHAN ، پیام String message) ؛ ResponseStatus sendBroadcastFixedMessage (بایت CHAN ، const string string) ؛
و برای ساختار شما
ResponseStatus sendFixedMessage (byte ADDL ، byte ADDH ، byte CHAN ، const void *message، const uint8_t size) ؛ ResponseStatus sendBroadcastFixedMessage (byte CHAN ، const void *message، const uint8_t size) ؛
در اینجا یک مثال ساده
ResponseStatus rs = e32ttl.sendFixedMessage (0، 0، 0x17، & messaggione، sizeof (Messaggione))؛ // ResponseStatus rs = e32ttl.sendFixedMessage (0، 0، 0x17، "Ciao")؛
انتقال ثابت سناریوهای بیشتری دارد
اگر به دستگاه خاصی ارسال می کنید (سناریوهای دوم انتقال ثابت) باید ADDL ، ADDH و CHAN را برای شناسایی مستقیم آن اضافه کنید.
ResponseStatus rs = e32ttl.sendFixedMessage (2 ، 2 ، 0x17 ، "پیام به یک دستگاه") ؛
اگر می خواهید پیامی را به همه دستگاه ها در یک کانال مشخص ارسال کنید ، می توانید از این روش استفاده کنید.
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage (0x17 ، "پیام به دستگاه های کانال") ؛
اگر می خواهید همه پیام های پخش شده در شبکه را دریافت کنید ، باید ADDH و ADDL خود را با BROADCAST_ADDRESS تنظیم کنید.
ResponseStructContainer c؛ c = e32ttl100.getConfiguration ()؛ // مهم است که اشاره گر پیکربندی را قبل از سایر عملیات دریافت کنید پیکربندی پیکربندی = *(پیکربندی *) c.data؛ Serial.println (c.status.getResponseDescription ()) ؛ Serial.println (c.status.code) ؛ printParameters (پیکربندی) ؛ configuration. ADDL = BROADCAST_ADDRESS؛ configuration. ADDH = BROADCAST_ADDRESS؛ // تنظیمات پیکربندی تغییر کرده و تنظیم شده است که پیکربندی ResponseStatus rs = e32ttl100.setConfiguration را نگه ندارد (پیکربندی ، WRITE_CFG_PWR_DWN_LOSE) ؛ Serial.println (rs.getResponseDescription ()) ؛ Serial.println (rs.code) ؛ printParameters (پیکربندی) ؛
مرحله 15: با تشکر
در حال حاضر شما همه اطلاعات را برای انجام کار خود دارید ، اما من فکر می کنم نشان دادن مثالهای واقع بینانه برای درک بهتر همه اینها مهم است.
- دستگاه LoRa E32 برای Arduino ، esp32 یا esp8266: تنظیمات و استفاده اصلی
- دستگاه LoRa E32 برای Arduino ، esp32 یا esp8266: کتابخانه
- دستگاه LoRa E32 برای Arduino ، esp32 یا esp8266: پیکربندی
- دستگاه LoRa E32 برای Arduino ، esp32 یا esp8266: انتقال ثابت
- دستگاه LoRa E32 برای Arduino ، esp32 یا esp8266: صرفه جویی در انرژی و ارسال داده های ساختار یافته
توصیه شده:
برد بلند ، 1.8 کیلومتر ، ارتباط بی سیم آردوینو تا آردوینو با HC-12 .: 6 مرحله (همراه با تصاویر)
برد طولانی ، 1.8 کیلومتر ، ارتباطات بی سیم آردوینو تا آردوینو با HC-12. ماژول ارتباطی بسیار مفید ، بسیار قدرتمند و آسان برای استفاده است. ابتدا می روی
ESP32 با ماژول E32-433T LoRa Module - رابط LoRa Arduino: 8 مرحله
ESP32 با ماژول E32-433T LoRa Module | LoRa Arduino Interfacing: سلام ، چه خبر ، بچه ها! Akarsh اینجا از CETech. این پروژه من در حال اتصال به ماژول E32 LoRa از eByte است که یک ماژول فرستنده گیرنده 1 وات با قدرت بالا با ESP32 با استفاده از Arduino IDE است. ما کار E32 را در آخرین آموزش خود درک کردیم
پیام رسان LoRa برای دو دستگاه تا فاصله 8 کیلومتر: 7 مرحله
مسنجر LoRa برای دو دستگاه برای فاصله تا 8 کیلومتر: پروژه را به لپ تاپ یا تلفن خود وصل کنید و سپس فقط با استفاده از LoRa بین دستگاه ها بدون اینترنت یا پیام کوتاه چت کنید. سلام ، بچه ها چه خبر؟ Akarsh در اینجا از CETech. امروز ما قصد داریم پروژه ای بسازیم که می تواند به تلفن هوشمند شما یا هر
کیلومتر شمار کیلومتر برقی: 5 مرحله
اسکیت برد الکتریکی کیلومتر شمار: مقدمه اکثر اسکیت بردهای برقی با قیمت هزار دلار با یک برنامه تلفن همراه ارائه می شوند که اطلاعات زمان واقعی اسکیت بورد را نمایش می دهد و متأسفانه اسکیت بردهای مقرون به صرفه تر از چین با آنها همراه نیستند. چرا که نه
نشانگر سطح آب بی سیم با برد بلند با زنگ هشدار - برد تا 1 کیلومتر - هفت سطح: 7 مرحله
نشانگر سطح آب بی سیم با برد بلند با زنگ هشدار | برد تا 1 کیلومتر | هفت سطح: آن را در یوتیوب تماشا کنید: https://youtu.be/vdq5BanVS0Y ممکن است بسیاری از شاخص های سطح آب سیمی و بی سیم را مشاهده کرده باشید که برد 100 تا 200 متر را ارائه می دهند. اما در این دستورالعمل ، شما قرار است Indi سطح آب بی سیم برد بلند را ببینید