รบกวนขอสอบถาม เรื่องการเขียนโค้ด LoRa หน่อยครับ

พอดี พึ่งเริ่มศึกษาเรื่อง LoRa นะครับ ขอรบกวนหน่อยครับ
ถ้ากดสวิทช์ ที่ต่ออยู่กับ ตัวส่ง แล้วให้ส่งข้อมูลไปที่ ตัวรับ ที่ต่อกับ LED แล้วเมื่อรับค่า ที่มาจาก
ตัวส่ง ทำให้ LED ติดค้าง และจะดับเมื่อปล่อยสวิทช์ ที่ ตัวส่ง
แต่ตอนนี้ ที่ผมทำได้คือ เมื่อกดสวิทช์ LED ดันติดๆ ดับๆ
โค้ดต้องแก้ไข้ หรือเพิ่มเติม อะไรตรงไหนหรอครับ

ตัวส่ง

#include <SPI.h>
#include <LoRa.h>

int pin = A0;

String text = "ให้ LED ติด";

void setup() {
  Serial.begin(9600);
  while (!Serial);
  Serial.println("LoRa-sender");
  pinMode(pin,INPUT);
  if (!LoRa.begin(433E6)) {
    Serial.println("Starting LoRa failed!");
    while(1);
  }
}

void loop(){
  int A = analogRead(pin);
  if (A==1023){
    LoRa.beginPacket();
    LoRa.print(text);
    LoRa.endPacket();

    Serial.print("Send '");
    Serial.print(text);
    Serial.println("'");
  }
}

ตัวรับ

#include <SPI.h>
#include <LoRa.h>

int led = A1;
String text = "LED ติด";

void setup() {
  Serial.begin(9600);
  while (!Serial);
  Serial.println("LoRa-received");
  pinMode(led,OUTPUT);
  if (!LoRa.begin(433E6)) {
    Serial.println("Starting LoRa failed!");
    while(1);
  }
  analogWrite(led,0);
}

void loop(){
  if (LoRa.parsePacket()) {
    String text = LoRa.readString();
    Serial.print("Receiver '");
    Serial.print(text);
    Serial.print("' RSSI is ");
    Serial.println(LoRa.packetRssi());
    analogWrite(led,1023);
  }
  else{
     analogWrite(led,0);
  }
}

คำสั่งนี้สั่งให้ทำอะไรครับ อธิบายหน่อย

สั่งให้ LED ติดถ้ามีข้อมูลถูกส่งเข้ามาครับ

ทำไม เราไม่ใช้คำสั่งนี้ละครับ digitalWrite(led, HIGH); ใช้แบบนั้นเหมือนว่าเราสั่งให้ปล่อย สัญญาณ pwm ออกมานะครับ ลองเปลี่ยนดู

ผมใช้ขา analog นะครับ เพราะว่าขา digital ถูกใช้งานไปกับชิป LoRa Ra-02 หมดแล้วครับ

ส่วนตัวผมยังไม่เคยลองใช้ LoRa นะครับ ถ้าเข้าใจผิดก็ขออภัย

ถ้างั้นผมถามว่า จะสั่งให้ led on/off ปกติใช้คำสั่งอะไรครับ

ใช้ LoRa ตัวไหนขอรายละเอียดหน่อย ครับ

ที่ผมเคยดูๆ มันก็เหมือน esp8266 หรือ esp32 นะครับ

มีพิน ให้สั่งงาน ปกติ มันไม่ได้ใช้ คำสั่ง digital ไม่ได้เลยหรือ อืมม รึผมเข้าใจผิดนะครับ

บอร์ดที่ผมใช้เป็น Arduino LoRa SX1278 วิธีใช้งานก็เหมือนกับตัว Arduino Uno ปกติครับ
analogWrite(led,1023); // จ่ายไฟ5V
1

พอผมกดสวิทช์(กดค้าง)จาก LoRa ตัวที่ 1 ก็จะส่งค่ามาที่ LoRaตัวที่ 2 LED ก็จะติดเฉพาะตอนที่รับค่ามา ทำให้ LED มันติดๆดับๆ ผมอยากให้LEDติดค้างตอนกดสวิทช์ และดับเมื่อปล่อยสวิทช์ครับ

ถ้าใช้ esp32 มันก็สามารถ ใช้คำสั่ง digital สั่งได้ปกติ เพราะ พอร์ตเหลือ

แสดงว่าผมเข้าใจถูกแล้วเพียงแต่ กระทู้ผมเข้าใจว่าใช้พวก esp32 นะครับ ประทานโทษ 555


ไปอ่าน datasheet มาแล้วครับ สรุป ขาdigital ใช้งานได้ปกติครับ ผมเข้าใจผิดว่ามันขาเดียวกันกับชิป LoRa ขอโทษทีครับ

เอ้าโถ่วววว ปั่นผมซะแล้ววววว :sweat_smile:

ขาพวกนี้สามารถนำมาใช้ได้เลยครับ

ขอโทษทีครับ 555 ผมพึ่งได้ลองเล่นบอร์ดตัวนี้

เปลี่ยนไปใช้งาน digital แล้วก็ยังเหมือนเดิม

ไม่เป็นไรครับ ผิดถูกยังไงก็ช่วยกันแก้ไขครับ

ทุกครั้งที่ผิดพลาด เรามักจะได้เรียนรู้อะไรบางอย่างเสมอ

ทีนี้วางโค้ตที่ใช้งานล่าสุดใหม่ครับ

ตัวส่ง

#include <SPI.h>
#include <LoRa.h>

int pin = 3;

String text = "ให้ LED ติด";

void setup() {
  Serial.begin(9600);
  while (!Serial);
  Serial.println("LoRa-sender");
  pinMode(pin,INPUT);
  if (!LoRa.begin(433E6)) {
    Serial.println("Starting LoRa failed!");
    while(1);
  }
}

void loop(){
  int A = digitalRead(pin);
  if (A==HIGH){
    LoRa.beginPacket();
    LoRa.print(text);
    LoRa.endPacket();

    Serial.print("Send '");
    Serial.print(text);
    Serial.println("'");
  }
  
}

ตัวรับ

#include <SPI.h>
#include <LoRa.h>

int led = 3;
String text = "LED ติด";

void setup(){
  Serial.begin(9600);
  while (!Serial);
  Serial.println("LoRa-received");
  pinMode(led,OUTPUT);
  if (!LoRa.begin(433E6)) {
    Serial.println("Starting LoRa failed!");
    while(1);
  }
  digitalWrite(led,0);
}

void loop(){
  if (LoRa.parsePacket()) {
    String text = LoRa.readString();
    Serial.print("Receiver '");
    Serial.print(text);
    Serial.print("' RSSI is ");
    Serial.println(LoRa.packetRssi());
    digitalWrite(led,HIGH);
  }
  else{
     digitalWrite(led,LOW);
  }
}

เท่าที่ดูแล้วโปรแกรมมันทะลุถึงกันหมดนะครับ

แล้วจะแก้ไขยังไงได้บ้างครับ ตอนนี้ตันหมดละครับ วันนี้ผมเองยังไม่ได้ทำต่อเลย หนีมาออกแบบวงจร

จริงๆ แล้ว loop การรับค่าจะต้องแยกกันก่อนครับ จากนั้นค่า text จะต้องเท่ากับค่าจากตัวส่งมา ถึงจะให้เข้าไปทำงาน on/off ตามที่เราต้องการประมาณนี้ ลองเอาไปต่อยอดดู

#include <SPI.h>
#include <LoRa.h>

int led = 3;
String text;

void setup(){
  Serial.begin(9600);
  while (!Serial);
  Serial.println("LoRa-received");
  pinMode(led,OUTPUT);
  if (!LoRa.begin(433E6)) {
    Serial.println("Starting LoRa failed!");
    while(1);
  }
  digitalWrite(led,0);
}

void loop(){
  if (LoRa.parsePacket()) {
    String text = LoRa.readString();
    Serial.print("Receiver '");
    Serial.print(text);
    Serial.print("' RSSI is ");
    Serial.println(LoRa.packetRssi());
    
  }
  else{
    Serial.printIn("no data");
  }

  if(text == "ให้ LED ติด"){
    digitalWrite(led,HIGH);
  }else{
    digitalWrite(led,LOW);
  }
 

}

image

ผมไม่แน่ใจว่ามันอ่านค่า ภาษาไทยได้รึป่าวลองเช็คดู หรือควรส่งเป็นภาษาอังกฤษ อาจจะชัวกว่า ลองเช็คดูก่อนนะครับ