AoNet
(sawit)
1
พอดี พึ่งเริ่มศึกษาเรื่อง 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);
}
}
Remy_Martin
(Permpol Thanapunnamas)
2
คำสั่งนี้สั่งให้ทำอะไรครับ อธิบายหน่อย
AoNet
(sawit)
3
สั่งให้ LED ติดถ้ามีข้อมูลถูกส่งเข้ามาครับ
Remy_Martin
(Permpol Thanapunnamas)
4
ทำไม เราไม่ใช้คำสั่งนี้ละครับ digitalWrite(led, HIGH);
ใช้แบบนั้นเหมือนว่าเราสั่งให้ปล่อย สัญญาณ pwm ออกมานะครับ ลองเปลี่ยนดู
AoNet
(sawit)
5
ผมใช้ขา analog นะครับ เพราะว่าขา digital ถูกใช้งานไปกับชิป LoRa Ra-02 หมดแล้วครับ
Remy_Martin
(Permpol Thanapunnamas)
6
ส่วนตัวผมยังไม่เคยลองใช้ LoRa นะครับ ถ้าเข้าใจผิดก็ขออภัย
ถ้างั้นผมถามว่า จะสั่งให้ led on/off ปกติใช้คำสั่งอะไรครับ
Remy_Martin
(Permpol Thanapunnamas)
7
ใช้ LoRa ตัวไหนขอรายละเอียดหน่อย ครับ
Remy_Martin
(Permpol Thanapunnamas)
8
ที่ผมเคยดูๆ มันก็เหมือน esp8266 หรือ esp32 นะครับ
มีพิน ให้สั่งงาน ปกติ มันไม่ได้ใช้ คำสั่ง digital ไม่ได้เลยหรือ อืมม รึผมเข้าใจผิดนะครับ
AoNet
(sawit)
9
บอร์ดที่ผมใช้เป็น Arduino LoRa SX1278 วิธีใช้งานก็เหมือนกับตัว Arduino Uno ปกติครับ
analogWrite(led,1023); // จ่ายไฟ5V
พอผมกดสวิทช์(กดค้าง)จาก LoRa ตัวที่ 1 ก็จะส่งค่ามาที่ LoRaตัวที่ 2 LED ก็จะติดเฉพาะตอนที่รับค่ามา ทำให้ LED มันติดๆดับๆ ผมอยากให้LEDติดค้างตอนกดสวิทช์ และดับเมื่อปล่อยสวิทช์ครับ
Remy_Martin
(Permpol Thanapunnamas)
10
ถ้าใช้ esp32 มันก็สามารถ ใช้คำสั่ง digital สั่งได้ปกติ เพราะ พอร์ตเหลือ
แสดงว่าผมเข้าใจถูกแล้วเพียงแต่ กระทู้ผมเข้าใจว่าใช้พวก esp32 นะครับ ประทานโทษ 555
AoNet
(sawit)
11
ไปอ่าน datasheet มาแล้วครับ สรุป ขาdigital ใช้งานได้ปกติครับ ผมเข้าใจผิดว่ามันขาเดียวกันกับชิป LoRa ขอโทษทีครับ
Remy_Martin
(Permpol Thanapunnamas)
12
เอ้าโถ่วววว ปั่นผมซะแล้ววววว
Remy_Martin
(Permpol Thanapunnamas)
13
ขาพวกนี้สามารถนำมาใช้ได้เลยครับ
AoNet
(sawit)
14
ขอโทษทีครับ 555 ผมพึ่งได้ลองเล่นบอร์ดตัวนี้
เปลี่ยนไปใช้งาน digital แล้วก็ยังเหมือนเดิม
Remy_Martin
(Permpol Thanapunnamas)
15
ไม่เป็นไรครับ ผิดถูกยังไงก็ช่วยกันแก้ไขครับ
ทุกครั้งที่ผิดพลาด เรามักจะได้เรียนรู้อะไรบางอย่างเสมอ
ทีนี้วางโค้ตที่ใช้งานล่าสุดใหม่ครับ
AoNet
(sawit)
16
ตัวส่ง
#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);
}
}
Remy_Martin
(Permpol Thanapunnamas)
17
เท่าที่ดูแล้วโปรแกรมมันทะลุถึงกันหมดนะครับ
AoNet
(sawit)
18
แล้วจะแก้ไขยังไงได้บ้างครับ ตอนนี้ตันหมดละครับ วันนี้ผมเองยังไม่ได้ทำต่อเลย หนีมาออกแบบวงจร
Remy_Martin
(Permpol Thanapunnamas)
19
จริงๆ แล้ว 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);
}
}
Remy_Martin
(Permpol Thanapunnamas)
20
ผมไม่แน่ใจว่ามันอ่านค่า ภาษาไทยได้รึป่าวลองเช็คดู หรือควรส่งเป็นภาษาอังกฤษ อาจจะชัวกว่า ลองเช็คดูก่อนนะครับ