สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: ห้องสมุด
- ขั้นตอนที่ 2: Pinout
- ขั้นตอนที่ 3: AUX Pin
- ขั้นตอนที่ 4: Schema Esp8266 ที่เชื่อมต่ออย่างสมบูรณ์
- ขั้นตอนที่ 5: เชื่อมต่อ Schema Arduino อย่างสมบูรณ์
- ขั้นตอนที่ 6: ไลบรารี: ตัวสร้าง
- ขั้นตอนที่ 7: เริ่ม
- ขั้นตอนที่ 8: วิธีการกำหนดค่าและข้อมูล
- ขั้นตอนที่ 9: คอนเทนเนอร์ตอบกลับ
- ขั้นตอนที่ 10: ตัวเลือกการกำหนดค่าพื้นฐาน
- ขั้นตอนที่ 11: ส่งข้อความรับ
- ขั้นตอนที่ 12: โหมดการส่งสัญญาณปกติ
- ขั้นตอนที่ 13: จัดการโครงสร้าง
- ขั้นตอนที่ 14: โหมดคงที่แทนโหมดปกติ
- ขั้นตอนที่ 15: ขอบคุณ
วีดีโอ: LoRa 3Km ถึง 8Km การสื่อสารไร้สายด้วยอุปกรณ์ E32 (sx1278/sx1276) ราคาประหยัดสำหรับ Arduino, Esp8266 หรือ Esp32: 15 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
ฉันสร้างห้องสมุดเพื่อจัดการ EBYTE E32 โดยใช้อุปกรณ์ LoRa ของ Semtech ซึ่งเป็นอุปกรณ์ที่มีประสิทธิภาพมาก เรียบง่าย และราคาถูก
คุณสามารถค้นหาเวอร์ชัน 3Km ได้ที่นี่ เวอร์ชัน 8Km ได้ที่นี่
พวกเขาสามารถทำงานได้ในระยะทาง 3,000 ม. ถึง 8000 ม. และมีคุณสมบัติและพารามิเตอร์มากมาย ดังนั้นฉันจึงสร้างห้องสมุดนี้เพื่อทำให้การใช้งานง่ายขึ้น
เป็นโซลูชันสำหรับการดึงข้อมูลจากเซ็นเซอร์ในเมืองใหญ่หรือเพื่อควบคุมเสียงพึมพำ
เสบียง
Arduino UNO
Wemos D1 mini
LoRa E32 TTL 100 รุ่น 3Km
LoRa E32 TTL รุ่น 1W 8Km
ขั้นตอนที่ 1: ห้องสมุด
คุณสามารถหาห้องสมุดของฉันได้ที่นี่
ดาวน์โหลด.
คลิกปุ่มดาวน์โหลดที่มุมบนขวา เปลี่ยนชื่อโฟลเดอร์ที่ไม่บีบอัด LoRa_E32
ตรวจสอบว่าโฟลเดอร์ LoRa_E32 มี LoRa_E32.cpp และ LoRa_E32.h
วางโฟลเดอร์ไลบรารี LoRa_E32 ของคุณ /libraries/ โฟลเดอร์ คุณอาจต้องสร้างโฟลเดอร์ย่อยของไลบรารีหากเป็นไลบรารีแรกของคุณ
รีสตาร์ท IDE
ขั้นตอนที่ 2: Pinout
อย่างที่คุณเห็น คุณสามารถตั้งค่าโหมดต่างๆ ผ่านหมุด M0 และ M1
มีพินบางตัวที่สามารถใช้งานได้แบบคงที่ แต่ถ้าคุณเชื่อมต่อกับไมโครคอนโทรลเลอร์และกำหนดค่าเหล่านี้ในไลบรารี คุณจะได้รับประสิทธิภาพและคุณสามารถควบคุมโหมดทั้งหมดผ่านซอฟต์แวร์ได้ แต่เราจะอธิบายให้ดีกว่านี้ต่อไป
ขั้นตอนที่ 3: AUX Pin
อย่างที่ฉันพูดไปแล้ว การเชื่อมต่อพินทั้งหมดกับเอาต์พุตของไมโครคอนโทรลเลอร์ไม่สำคัญ คุณสามารถใส่พิน M0 และ M1 ไปที่ HIGH หรือ LOW เพื่อรับการกำหนดค่าที่ต้องการ และถ้าคุณไม่เชื่อมต่อ AUX ไลบรารีจะตั้งค่าการหน่วงเวลาที่เหมาะสมเพื่อให้แน่ใจ ว่าการดำเนินการเสร็จสิ้น
หมุด AUX
เมื่อส่งข้อมูลสามารถใช้เพื่อปลุก MCU ภายนอกและคืนค่า HIGH เมื่อการถ่ายโอนข้อมูลเสร็จสิ้น
เมื่อรับ AUX ไปที่ LOW และคืนค่า HIGH เมื่อบัฟเฟอร์ว่างเปล่า
นอกจากนี้ยังใช้สำหรับการตรวจสอบตัวเองเพื่อเรียกคืนการทำงานปกติ (เมื่อเปิดเครื่องและโหมดสลีป/โปรแกรม)
ขั้นตอนที่ 4: Schema Esp8266 ที่เชื่อมต่ออย่างสมบูรณ์
สคีมาการเชื่อมต่อ esp8266 นั้นง่ายกว่าเพราะทำงานที่แรงดันไฟฟ้าเดียวกันของการสื่อสารเชิงตรรกะ (3.3v)
สิ่งสำคัญคือต้องเพิ่มตัวต้านทานแบบดึงขึ้น (4, 7Kohm) เพื่อให้ได้ความเสถียรที่ดี
ขั้นตอนที่ 5: เชื่อมต่อ Schema Arduino อย่างสมบูรณ์
แรงดันไฟทำงานของ Arduino คือ 5v ดังนั้นเราจึงจำเป็นต้องเพิ่มตัวแบ่งแรงดันบน RX pin M0 และ M1 ของโมดูล LoRa เพื่อป้องกันความเสียหาย คุณสามารถรับข้อมูลเพิ่มเติมได้ที่นี่ ตัวแบ่งแรงดัน: เครื่องคิดเลขและแอปพลิเคชัน
คุณสามารถใช้ตัวต้านทาน 2Kohm กับ GND และ 1Kohm จากสัญญาณแทนที่จะรวมกันบน 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);
คอนสตรัคเตอร์ชุดแรกถูกสร้างขึ้นเพื่อมอบหมายการจัดการ Serial และพินอื่นๆ ให้กับไลบรารี
rxPin และ txPin เป็นพินสำหรับเชื่อมต่อกับ UART และจำเป็น
auxPin เป็นพินที่ตรวจสอบการทำงาน สถานะการส่งและรับ (เราจะอธิบายต่อไปดีกว่า) พินนั้น ไม่จำเป็น ถ้าคุณไม่ตั้งค่า ฉันจะใช้การหน่วงเวลาเพื่อให้การดำเนินการเสร็จสิ้นเอง (ด้วยเวลาแฝง)
m0pin และ m1Pin เป็นหมุดสำหรับเปลี่ยนโหมดการทำงาน (ดูตารางด้านบน) ฉันคิดว่าหมุดนี้ใน "การผลิต" จะเชื่อมต่อโดยตรงในระดับสูงหรือต่ำ แต่สำหรับการทดสอบ ไลบรารีเหล่านี้มีประโยชน์ในการจัดการ
bpsRate เป็น boudrate ของ SoftwareSerial ปกติคือ 9600 (อัตรา baud เดียวในโหมด programmin/sleep)
ตัวอย่างง่ายๆคือ
#รวม "LoRa_E32.h"LoRa_E32 e32ttl100(2, 3); // RX, TX // LoRa_E32 e32ttl100 (2, 3, 5, 6, 7); // RX, TX
เราสามารถใช้ SoftwareSerial โดยตรงกับตัวสร้างอื่นได้
LoRa_E32 (ฮาร์ดแวร์ซีเรียล* อนุกรม UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (ฮาร์ดแวร์ซีเรียล* ซีเรียล, ไบต์ 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"
ซอฟต์แวร์Serial 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* serial, ไบต์ auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* serial, ไบต์ auxPin, ไบต์ m0Pin, ไบต์ m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
ขั้นตอนที่ 7: เริ่ม
คำสั่งเริ่มต้นใช้เพื่อเริ่มต้น Serial และพินในโหมดอินพุตและเอาต์พุต
เป็นโมฆะเริ่มต้น ();
ในการดำเนินการคือ
// เริ่มต้นพินทั้งหมดและ UART
e32ttl100.begin();
ขั้นตอนที่ 8: วิธีการกำหนดค่าและข้อมูล
มีชุดวิธีการสำหรับจัดการการกำหนดค่าและรับข้อมูลของอุปกรณ์
ResponseStructContainer รับการกำหนดค่า ();
ResponseStatus setConfiguration(การกำหนดค่าคอนฟิก PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation();
ถือเป็นโมฆะ 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
ตอบกลับคอนเทนเนอร์
คอนเทนเนอร์นี้สร้างขึ้นเพื่อจัดการการตอบสนองของสตริงและมีจุดเริ่มต้น 2 จุด
ข้อมูลที่มีสตริงที่ส่งคืนจากข้อความและสถานะอินสแตนซ์ของ RepsonseStatus
ResponseContainer rs = e32ttl.receiveMessage();
ข้อความสตริง = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println (ข้อความ);
ResponseStructContainer
นี่คือคอนเทนเนอร์ที่ "ซับซ้อน" มากกว่า ฉันใช้สิ่งนี้เพื่อจัดการโครงสร้าง มันมีจุดเริ่มต้นเหมือนกันของ ResponseContainer แต่ข้อมูลเป็นตัวชี้เป็นโมฆะเพื่อจัดการโครงสร้างที่ซับซ้อน
ResponseStructContainer ค;
c = e32ttl100.getConfiguration();// รับตัวชี้การกำหนดค่าก่อนการดำเนินการอื่น ๆ ทั้งหมด
การกำหนดค่าการกำหนดค่า = *(การกำหนดค่า*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println (c.status.code);
getConfiguration และ setConfiguration
วิธีแรกคือ getConfiguration คุณสามารถใช้เพื่อดึงข้อมูลทั้งหมดที่จัดเก็บไว้ในอุปกรณ์
ResponseStructContainer รับการกำหนดค่า ();
นี่คือตัวอย่างการใช้งาน
ResponseStructContainer ค;
c = e32ttl100.getConfiguration();// รับตัวชี้การกำหนดค่าก่อนการดำเนินการอื่น ๆ ทั้งหมด
การกำหนดค่าการกำหนดค่า = *(การกำหนดค่า*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println (c.status.code);
Serial.println(configuration. SPED.getUARTBaudRate());
โครงสร้างการกำหนดค่ามีข้อมูลการตั้งค่าทั้งหมด และฉันเพิ่มชุดฟังก์ชันเพื่อรับคำอธิบายทั้งหมดของข้อมูลเดียว
การกำหนดค่า ADDL = 0x0; // ส่วนแรกของ addressconfiguration. ADDH = 0x1; // ส่วนที่สองของการกำหนดค่าที่อยู่ CHAN = 0x19; // Channel configuration. 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; // การกำหนดค่าอัตราบอดการสื่อสาร SPED.uartParity = MODE_00_8N1; // พาริตี้บิต
คุณมีฟังก์ชันเทียบเท่าสำหรับแอตทริบิวต์ทั้งหมดเพื่อรับคำอธิบายทั้งหมด:
Serial.print(F("จันทร์:")); Serial.print(configuration. CHAN ธ.ค.); Serial.print(" -> "); Serial.println(configuration.getChannelDescription());Serial.println(F(" ")); 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 (การกำหนดค่า); การกำหนดค่า ADDL = 0x0; การกำหนดค่า ADDH = 0x1; configuration. CHAN = 0x19; configuration. OPTION.fec = FEC_0_OFF; configuration. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; การกำหนดค่า 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; การกำหนดค่าSPED.uartBaudRate = UART_BPS_115200; configuration. SPED.uartParity = MODE_00_8N1; // ตั้งค่าการเปลี่ยนแปลงและตั้งค่าให้ไม่เก็บการกำหนดค่า ResponseStatus rs = e32ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE); Serial.println(rs.getResponseDescription()); Serial.println(rs.code); printParameters (การกำหนดค่า);
พารามิเตอร์ทั้งหมดได้รับการจัดการเป็นค่าคงที่:
ขั้นตอนที่ 10: ตัวเลือกการกำหนดค่าพื้นฐาน
ขั้นตอนที่ 11: ส่งข้อความรับ
ก่อนอื่นเราต้องแนะนำวิธีง่ายๆ แต่มีประโยชน์เพื่อตรวจสอบว่ามีบางอย่างอยู่ในบัฟเฟอร์การรับหรือไม่
int พร้อมใช้งาน ();
เป็นการส่งคืนจำนวนไบต์ที่คุณมีในสตรีมปัจจุบัน
ขั้นตอนที่ 12: โหมดการส่งสัญญาณปกติ
โหมดการส่งข้อมูลปกติ/โปร่งใสใช้เพื่อส่งข้อความไปยังอุปกรณ์ทั้งหมดที่มีที่อยู่และช่องสัญญาณเดียวกัน
มีหลายวิธีในการส่ง/รับข้อความ เราจะอธิบายโดยละเอียด:
ResponseStatus sendMessage (ข้อความ const String);
ResponseContainer รับข้อความ ();
วิธีแรกคือ sendMessage และใช้เพื่อส่งสตริงไปยังอุปกรณ์ในโหมดปกติ
ResponseStatus rs = e32ttl.sendMessage("Prova");Serial.println(rs.getResponseDescription()); สถานะการตอบกลับ rs = e32ttl.sendMessage("Prova");
อีกเครื่องก็ทำแบบวนซ้ำ
ถ้า (e32ttl.available() > 1){ResponseContainer rs = e32ttl.receiveMessage(); ข้อความสตริง = rs.data; // ก่อนได้รับข้อมูล Serial.println(rs.status.getResponseDescription()); Serial.println (ข้อความ); }
ขั้นตอนที่ 13: จัดการโครงสร้าง
หากคุณต้องการส่งโครงสร้างที่ซับซ้อน คุณสามารถใช้วิธีนี้
ResponseStatus sendMessage (const void *ข้อความ ขนาด const uint8_t); ResponseStructContainer รับข้อความ (ขนาด const uint8_t);
ใช้สำหรับส่ง strucutre เช่น:
struct Messaggione {ประเภทถ่าน[5]; ข้อความถ่าน[8]; บูลไมติโก; }; struct Messaggione messaggione = {"ชั่วคราว", "Peple", จริง}; 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 receiveInitialMessage (ขนาด const uint8_t);
ฉันสร้างมันเพื่อรับสตริงที่มีประเภทหรืออื่น ๆ เพื่อระบุโครงสร้างที่จะโหลด
struct Messaggione {// โครงสร้างบางส่วนที่ไม่มีข้อความ typechar[8]; บูลไมติโก; }; ประเภทถ่าน[5]; // ส่วนแรกของโครงสร้าง ResponseContainer rs = e32ttl.receiveInitialMessage(sizeof(type)); // ใส่สตริงในอาร์เรย์ถ่าน (ไม่จำเป็น) memcpy (ประเภท, rs.data.c_str(), sizeof(ประเภท)); Serial.println("อ่านประเภท: "); Serial.println(rs.status.getResponseDescription()); Serial.println (ประเภท); // อ่านส่วนที่เหลือของโครงสร้าง ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Messaggione)); struct Messaggione ข้อความ = *(Messaggione*) rsc.data;
ขั้นตอนที่ 14: โหมดคงที่แทนโหมดปกติ
ในลักษณะเดียวกัน ฉันสร้างชุดวิธีการเพื่อใช้กับการส่งแบบตายตัว
เกียร์ธรรมดา
คุณต้องเปลี่ยนเฉพาะวิธีการส่ง เนื่องจากอุปกรณ์ปลายทางไม่ได้รับคำนำที่มีที่อยู่และโหมดคงที่ของช่อง
ดังนั้นสำหรับข้อความสตริงที่คุณมี
ResponseStatus sendFixedMessage (ไบต์ ADDL, ไบต์ ADDH, ไบต์ CHAN, ข้อความสตริง const);ResponseStatus sendBroadcastFixedMessage (ไบต์ CHAN, ข้อความสตริง const);
และสำหรับโครงสร้างที่คุณมี
ResponseStatus sendFixedMessage (ไบต์ ADDL, ไบต์ ADDH, ไบต์ CHAN, const void *ข้อความ, ขนาด const uint8_t);ResponseStatus sendBroadcastFixedMessage (ไบต์ CHAN, const void *ข้อความ, ขนาด const uint8_t);
นี่คือตัวอย่างง่ายๆ
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, "ข้อความไปยังอุปกรณ์");
หากคุณต้องการส่งข้อความไปยังอุปกรณ์ทั้งหมดใน Channel ที่ระบุ คุณสามารถใช้วิธีนี้ได้
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 (การกำหนดค่า); การกำหนดค่า ADDL = BROADCAST_ADDRESS; การกำหนดค่า ADDH = BROADCAST_ADDRESS; // ตั้งค่าการเปลี่ยนแปลงและตั้งค่าให้ไม่เก็บการกำหนดค่า ResponseStatus rs = e32ttl100.setConfiguration(configuration, 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: library
- อุปกรณ์ LoRa E32 สำหรับ Arduino, esp32 หรือ esp8266: configuration
- อุปกรณ์ LoRa E32 สำหรับ Arduino, esp32 หรือ esp8266: การส่งสัญญาณคงที่
- อุปกรณ์ LoRa E32 สำหรับ Arduino, esp32 หรือ esp8266: การประหยัดพลังงานและการส่งข้อมูลที่มีโครงสร้าง
แนะนำ:
วิธีใช้ Neopixel Ws2812 LED หรือ LED STRIP หรือ Led Ring กับ Arduino: 4 ขั้นตอน
วิธีใช้ Neopixel Ws2812 LED หรือ LED STRIP หรือ Led Ring กับ Arduino: สวัสดีทุกคนเนื่องจาก Neopixel led Strip เป็นที่นิยมอย่างมากและเรียกอีกอย่างว่า ws2812 led strip เช่นกัน พวกเขาเป็นที่นิยมอย่างมากเพราะในแถบนำเหล่านี้เราสามารถระบุแต่ละ LED แยกจากกัน ซึ่งหมายความว่าหากคุณต้องการให้ไฟ LED สองสามดวงเรืองแสงเป็นสีเดียว
Arduino Ws2812 LED หรือ Neopixel Led Strip หรือ Ring Tutorial: 4 ขั้นตอน
Arduino Ws2812 LED หรือ Neopixel Led Strip หรือ Ring Tutorial: ในคำแนะนำนี้เราจะเรียนรู้วิธีใช้ neopixel หรือ ws 2812 หรือนำอย่างรวดเร็วด้วย Arduino LED หรือแถบหรือวงแหวนประเภทนี้ถูกควบคุมโดยพิน Vin เพียงอันเดียวและทั้งหมด LED สามารถระบุแอดเดรสแยกกันได้ ดังนั้นจึงเรียกอีกอย่างว่า indi
ESP32 พร้อมบทแนะนำโมดูล LoRa E32-433T - การเชื่อมต่อ LoRa Arduino: 8 ขั้นตอน
ESP32 พร้อมบทแนะนำโมดูล LoRa E32-433T | การเชื่อมต่อ LoRa Arduino: เฮ้ ว่าไงพวก! Akarsh ที่นี่จาก CETech โครงการของฉันกำลังเชื่อมต่อโมดูล E32 LoRa จาก eByte ซึ่งเป็นโมดูลตัวรับส่งสัญญาณกำลังสูง 1 วัตต์กับ ESP32 โดยใช้ Arduino IDE เราเข้าใจการทำงานของ E32 ในบทช่วยสอนล่าสุดของเรา
บทช่วยสอนโมดูล E32-433T LoRa - DIY Breakout Board สำหรับโมดูล E32: 6 ขั้นตอน
บทช่วยสอนโมดูล E32-433T LoRa | DIY Breakout Board สำหรับโมดูล E32: ว่าไงพวก! Akarsh ที่นี่จาก CETech โครงการของฉันนี้เป็นช่วงการเรียนรู้มากกว่าที่จะเข้าใจการทำงานของโมดูล E32 LoRa จาก eByte ซึ่งเป็นโมดูลตัวรับส่งสัญญาณกำลังสูง 1 วัตต์ เมื่อเราเข้าใจการทำงานแล้ว ก็มีการออกแบบ
Faucet Faucet หรือ Pedal Faucet หรือ Water Saver Tap ฟรี: 5 ขั้นตอน
Hand Free Faucet หรือ Pedal Faucet หรือ Water Saver Tap: นี่เป็นวิธีที่ประหยัดและง่ายในการเปลี่ยน faucet ที่ทางออกเป็น faucet แบบแฮนด์ฟรี (ถูกสุขลักษณะ) แพทย์ต้องการเพื่อวัตถุประสงค์ที่ถูกสุขอนามัย หรือในห้องครัว พนักงานที่คล้ายกันสำหรับ Hand-free สำหรับ ล้างมือทั้งสองข้างพร้อมกันและประหยัดน้ำ มันคือ