Arduino Polska Forum

Pełna wersja: SIM800L - problem z komunikacją (Arduino/Putty)
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2
Witam, 

od kilku tygodni borykam się z modułem SIM800L. Ogólnie rzecz ujmując chciałem zbudować system zdalnego podlewania działki rekreacyjnej. Moduł od temperatury/wilgotności działa bez zarzutu. Aktualnie dysponuję już dwoma modułami SIM800L: wersja na 4,2V oraz wersja II na 5V. Ostatnio dokupiłem moduł USB UART PL2303 żeby sprawdzić czy za pośrednictwem Putty "pogada" ze mną. SIM800L jest zasilany przez przetwornicę. Jedyne co widać w Putty widoczne jest na załączonym zrzucie ekranu. Czy może mi ktoś pomóc z tym?
Ustaw prawidłową prędkość UART w putty... W tej chwili są niezgodne i dlatego krzaczki..
(17-09-2022, 20:40)Jarewa0606 napisał(a): [ -> ]Ustaw prawidłową prędkość UART w putty... W tej chwili są niezgodne i dlatego krzaczki..

Port COM ma prędkość 9600 i w putty też łączę przez COM z prędkością 9600.
Ale SIM800L może z inna prędkością nadawać
SIM'y mają czasami logikę 2.8V, tak w ciemno to lepiej robić połączenia przez konwerter logiki.
(19-09-2022, 02:40)kaczakat napisał(a): [ -> ]SIM'y mają czasami logikę 2.8V, tak w ciemno to lepiej robić połączenia przez konwerter logiki.

Czy mógłbyś rozwinąć temat takiemu laikowi jakim jestem?
Poziom logiczny sygnału to zakres w którym zmienia się napięcie, np. od 0 do 5V, 3.3V, 2.8V.
Arduino typowo jest 5V, czyli jak sygnał jest poniżej 1/3 to jest uznawany za 0, a powyżej 2/3 za 1, te zakresy mogą być różne, przy dużych prędkościach trudniej osiągnąć pełne 5V. Jak poziomy logiczne nie są zgodne to urządzenia mogą się nie dogadać, albo nawet uszkodzić gdy na pin 3.3V poda się napięcie 5V. Nawet jak się nic nie uszkodzi, to coś co dla jednego jest już 1 dla drugiego urządzenia może być 0, albo część 1 uzna za 0 i się nie dagadają, Dlatego są konwertery poziomów logicznych.
(21-09-2022, 13:47)kaczakat napisał(a): [ -> ]Poziom logiczny sygnału to zakres w którym zmienia się napięcie, np. od 0 do 5V, 3.3V, 2.8V.
Arduino typowo jest 5V, czyli jak sygnał jest poniżej 1/3 to jest uznawany za 0, a powyżej 2/3 za 1, te zakresy mogą być różne, przy dużych prędkościach trudniej osiągnąć pełne 5V. Jak poziomy logiczne nie są zgodne to urządzenia mogą się nie dogadać, albo nawet uszkodzić gdy na pin 3.3V poda się napięcie 5V. Nawet jak się nic nie uszkodzi, to coś co dla jednego jest już 1 dla drugiego urządzenia może być 0, albo część 1 uzna za 0 i się nie dagadają, Dlatego są konwertery poziomów logicznych.

Czyli jak dobrze rozumiem to na każdą linię TX i RX muszę taki konwerter zapodać ?
To nie jest tak, że musisz, ale jak nie wiesz jaka jest logika to powinieneś. Mam simy, które działają na 5V i nie mam problemów z komunikacja, ale jest też możliwe, że jak podłączyłeś 5V do 2.8V to już z nim nie pogadasz. To jest tak samo jak podłączenie 2.2V do GND, LED może zabłysnąć jasnym światłem w takich warunkach, raz.
Problem może leżeć w zupełnie innym miejscu, ale trzeba eliminować wszystkie niepewności najłatwiejsze do wyeliminowania.
Witam wszystkich jeszcze raz. Miałem dość długą przerwę od jakiegokolwiek Arduino i postanowiłem wrócić do tego tematu.
[attachment=1471]
Wszystko podłączone jak na powyższym schemacie. Karta SIM aktywna, sygnał "wolny" kiedy dzwonię na ten numer. Dioda na module mruga zgodnie ze schematem, co 3 sekundy. 
Kod:
#include <SoftwareSerial.h>

//Create software serial object to communicate with SIM800L
SoftwareSerial mySerial(2,3); //SIM800L Tx & Rx is connected to Arduino #3 & #2

void setup()
{
  //Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(115200);
 
  //Begin serial communication with Arduino and SIM800L
  mySerial.begin(115200);

  Serial.println("Initializing...");
  //delay(1000);

  mySerial.println("AT"); //Once the handshake test is successful, it will back to OK
  updateSerial();

  mySerial.println("AT+CMGF=1"); // Configuring TEXT mode
  updateSerial();
  mySerial.println("AT+CMGS=\"+48697xxxxxx\"");//change ZZ with country code and xxxxxxxxxxx with phone number to sms
  updateSerial();
  mySerial.print("Last Minute Engineers | lastminuteengineers.com"); //text content
  updateSerial();
  mySerial.write(26);
}

void loop()
{
  updateSerial();
}

void updateSerial()
{
  delay(500);
  while (Serial.available())
  {
    mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while(mySerial.available())
  {
    Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port
  }
}
W serial monitor otrzymuję jedynie "Initializing...". Co robię nie tak.
Stron: 1 2