-
1. Data: 2018-11-25 16:59:51
Temat: Arduino, SIM900A, SMS
Od: "Michal M. Lechanski" <m...@d...eu>
Dzień dobry,
Może ktoś z Was podpowie mi co robię źle.
Hardware: Arduino Uno, moduł GSM SIM900A, zasilacz 5V 3.6A
Software jak poniżej. W plikach Arduino SoftwareSerial.h i
HardwareSerial.h zmieniona wielkość bufora RX do 256.
Objawy - wysyłanie smsów działa (choć przyznam, że nie sprawdzałem ile
maksymalnie znaków mogę wysłać), odbieranie działa ale odebrana
wiadomość jest ucinana do kilkunastu znaków (poniżej przykład).
Wysyłam dla przykładu 1234567890 powtórzone pięć razy i w msgBuffer
otrzymuję:
+CMT: "+XXXXXXXXXXXX","","18/11/25,15:36:19+00"
12345678901237
czasem ostatnia cyferka jest inna, czasem jej w ogóle nie ma, czasem
jest jedna więcej - żadnej prawidłowości.
Kod (właściwie to copy&paste z internetowych poradników):
#include <SoftwareSerial.h>
SoftwareSerial mySerial(5, 6);
void SendMessage(String rcpNumber, String sendMsgBody)
{
mySerial.println("AT+CMGF=1"); //Sets the GSM Module in Text Mode
delay(1000); // Delay of 1000 milli seconds or 1 second
mySerial.print("AT+CMGS=\"");
mySerial.print(rcpNumber);
mySerial.println("\"\r");
delay(1000);
mySerial.println(sendMsgBody);// The SMS text you want to send
delay(100);
mySerial.println((char)26);// ASCII code of CTRL+Z
delay(1000);
}
void setup() {
Serial.begin(115200);
delay(2000);
mySerial.begin(57600);
delay(30000);
mySerial.println("AT+CMGF=1");
mySerial.println("AT+CNMI=2,2,0,0,0");
delay(1000);
Serial.print("End of setup");
SendMessage("+XXXXXXXXXXXX", "End of setup");
}
void loop() {
msgDetails();
}
void msgDetails() {
String msgBuffer = readSIM900A();
if (msgBuffer.startsWith("\r\n+CMT: ")) {
Serial.println(msgBuffer);
}
}
String readSIM900A() {
String msgBuffer;
while (mySerial.available() > 0) {
char c = mySerial.read();
msgBuffer.concat(c);
delay(10);
}
return msgBuffer;
}
Pomożecie? Z góry bardzo dziękuję.
--
Michał
-
2. Data: 2018-11-25 19:21:45
Temat: Re: Arduino, SIM900A, SMS
Od: Zbych <a...@o...pl>
Michal M. Lechanski wrote on 25.11.2018 16:59:
> Dzień dobry,
>
> Może ktoś z Was podpowie mi co robię źle.
>
> Hardware: Arduino Uno, moduł GSM SIM900A, zasilacz 5V 3.6A
> Software jak poniżej. W plikach Arduino SoftwareSerial.h i
> HardwareSerial.h zmieniona wielkość bufora RX do 256.
>
> Objawy - wysyłanie smsów działa (choć przyznam, że nie sprawdzałem ile
> maksymalnie znaków mogę wysłać), odbieranie działa ale odebrana
> wiadomość jest ucinana do kilkunastu znaków (poniżej przykład).
Po pierwsze podłącz oscyloskop albo lepiej analizator stanów logicznych
na linie RxD/TxD i zweryfikuj co faktycznie leci po drutach, łącznie z
czasami trwania bitów.
Może masz odrobinę skopaną prędkość transmisji i po kilku bajtach ci się
rozjeżdża synchronizacja?
Zwłaszcza jeśli używasz software'owego UARTa. Jeśli masz też włączone
inne przerwania (timery?, inne uarty?), to na bank nie będzie to
działało dobrze.
AVR nie ma priorytetów przerwań i jedyne co możesz w tej sytuacji zrobić
to zmiana procka na model z 2 UARTami.
PS. Pamiętam też że ktoś już kiedyś skarżył się na grupie na modem
SIMxxx, że cześć radiowa zakłócała mu komunikację po RSie, ale to
sprawdził po upewnieniu się, że z programem jest wszystko w porządku.
-
3. Data: 2018-11-25 19:33:54
Temat: Re: Arduino, SIM900A, SMS
Od: "Michal M. Lechanski" <m...@d...eu>
W dniu 25.11.2018 o 18:21, Zbych pisze:
> Po pierwsze podłącz oscyloskop albo lepiej analizator stanów logicznych
> na linie RxD/TxD i zweryfikuj co faktycznie leci po drutach, łącznie z
> czasami trwania bitów.
Pięknie dziękuję, ale przeceniasz mnie :-)
> Może masz odrobinę skopaną prędkość transmisji i po kilku bajtach ci się
> rozjeżdża synchronizacja?
Zapomniałem napisać - sprawdzałem dla różnych kombinacji prędkości i
albo nie dostawałem nic, albo jakieś krzaczki. Ustawienia Serial i
prędkość w okienku terminala na 115200 wydają się działać dla różnych
prędkości SoftwareSerial. Nie wpływa to jednak na to co dostaję w msgBuffer
> po upewnieniu się, że z programem jest wszystko w porządku.
Jak pisałem poprzednio - mój "program" to w zasadzie copy&paste z (wielu
różnych) internetowych poradników. Trudno mi uwierzyć, żeby wszyscy
autorzy publikowali to bez sprawdzenia.
Jeszcze raz bardzo dziękuję za zainteresowanie.
--
Michał
-
4. Data: 2018-11-25 19:50:23
Temat: Re: Arduino, SIM900A, SMS
Od: Zbych <a...@o...pl>
Michal M. Lechanski wrote on 25.11.2018 19:33:
> W dniu 25.11.2018 o 18:21, Zbych pisze:
>
>> Po pierwsze podłącz oscyloskop albo lepiej analizator stanów logicznych
>> na linie RxD/TxD i zweryfikuj co faktycznie leci po drutach, łącznie z
>> czasami trwania bitów.
>
> Pięknie dziękuję, ale przeceniasz mnie :-)
Tzn. nie masz 20...40zł na narzędzie, które pozwoli ci zweryfikować co
się dzieje na drutach?
https://allegro.pl/listing?string=Saleae
https://www.aliexpress.com/w/wholesale-logic-analyze
r.html?spm=2114.search0104.0.0.8205740boSXdhk&initia
tive_id=SB_20181125104744&site=glo&groupsort=1&SortT
ype=price_asc&SearchText=logic+analyzer
>> Może masz odrobinę skopaną prędkość transmisji i po kilku bajtach ci się
>> rozjeżdża synchronizacja?
>
> Zapomniałem napisać - sprawdzałem dla różnych kombinacji prędkości i
> albo nie dostawałem nic, albo jakieś krzaczki. Ustawienia Serial i
> prędkość w okienku terminala na 115200 wydają się działać dla różnych
> prędkości SoftwareSerial. Nie wpływa to jednak na to co dostaję w msgBuffer
Jeśli problemem jest programowy Uart, to tylko maksymalne obniżenie
prędkości transmisji może cię ratować. Ale i tak najpierw musisz z
prędkością 115200 wysłać do SIM900 komendę zmieniającą prędkość na np. 9600.
-
5. Data: 2018-11-25 20:06:06
Temat: Re: Arduino, SIM900A, SMS
Od: "Michal M. Lechanski" <m...@d...eu>
W dniu 25.11.2018 o 18:50, Zbych pisze:
> Michal M. Lechanski wrote on 25.11.2018 19:33:
>> W dniu 25.11.2018 o 18:21, Zbych pisze:
>>
>>> Po pierwsze podłącz oscyloskop albo lepiej analizator stanów logicznych
>>> na linie RxD/TxD i zweryfikuj co faktycznie leci po drutach, łącznie z
>>> czasami trwania bitów.
>>
>> Pięknie dziękuję, ale przeceniasz mnie :-)
>
> Tzn. nie masz 20...40zł na narzędzie, które pozwoli ci zweryfikować co
> się dzieje na drutach?
Nie w narzędziu problem ale w umiejętności skorzystania z takiego
urządzenia lub interpretacji uzyskanych pomiarów.
> Jeśli problemem jest programowy Uart, to tylko maksymalne obniżenie
> prędkości transmisji może cię ratować. Ale i tak najpierw musisz z
> prędkością 115200 wysłać do SIM900 komendę zmieniającą prędkość na np. 9600.
To wydaje mi się ważne - nie pomyślałem że zadeklarowanie prędkości w
kodzie może nie być wystarczające i że trzeba jeszcze zmienić ustawienia
modemu... Poczytam, spróbuję.
Dzięki za dodatkowy trop, bez względu na to dokąd mnie doprowadzi :-)
--
Michał
-
6. Data: 2018-11-25 21:12:42
Temat: Re: Arduino, SIM900A, SMS
Od: Marek <f...@f...com>
On Sun, 25 Nov 2018 19:21:45 +0100, Zbych <a...@o...pl> wrote:
> PS. Pamiętam też że ktoś już kiedyś skarżył się na grupie na modem
> SIMxxx, że cześć radiowa zakłócała mu komunikację po RSie, ale to
> sprawdził po upewnieniu się, że z programem jest wszystko w
> porządku.
To ja pisałem. Faktycznie zakłócenia były tak silne, że musiałem
prędkość obniżyć do 9600, natomiast nigdy nie udało mi się tym
modulem (w sensie chińskiej płytki z modułem) uzyskać 100% transmisji
bez błędów.
A tak z ciekawości pytanie do inicjatora wątku, z jakiego zrodla
pochodzi ten Twój sim900A? O ile pamiętam sim900a był wyłącznie na
rynek azjatycki z simlockiem. Sam go flashowales by chodził u nas?
--
Marek
-
7. Data: 2018-11-25 21:17:19
Temat: Re: Arduino, SIM900A, SMS
Od: "Michal M. Lechanski" <m...@d...eu>
W dniu 25.11.2018 o 20:12, Marek pisze:
> A tak z ciekawości pytanie do inicjatora wątku, z jakiego zrodla
> pochodzi ten Twój sim900A? O ile pamiętam sim900a był wyłącznie na
> rynek azjatycki z simlockiem. Sam go flashowales by chodził u nas?
Kupiony na eBay więc pewnie z Chin, choć dostawa była z UK. I tutaj
działa, tyle że narowiście... Czy sprzedawca coś z nim robił? Nie mam
pojęcia.
--
Michał
-
8. Data: 2018-11-25 22:48:36
Temat: Re: Arduino, SIM900A, SMS
Od: "J.F." <j...@p...onet.pl>
Dnia Sun, 25 Nov 2018 15:59:51 +0000, Michal M. Lechanski napisał(a):
> void msgDetails() {
> String msgBuffer = readSIM900A();
> if (msgBuffer.startsWith("\r\n+CMT: ")) {
> Serial.println(msgBuffer);
> }
> }
>
> String readSIM900A() {
> String msgBuffer;
> while (mySerial.available() > 0) {
> char c = mySerial.read();
> msgBuffer.concat(c);
> delay(10);
^^^^^
> }
> return msgBuffer;
> }
wstaw delay(1), albo wywal kompletnie/przerob.
Teraz ci grozi cos takiego, ze znaki stracisz, bo sie bufor przepelni.
J.
-
9. Data: 2018-11-25 23:10:32
Temat: Re: Arduino, SIM900A, SMS
Od: "Michal M. Lechanski" <m...@d...eu>
W dniu 25.11.2018 o 21:48, J.F. pisze:
> Dnia Sun, 25 Nov 2018 15:59:51 +0000, Michal M. Lechanski napisał(a):
>> delay(10);
> ^^^^^
> wstaw delay(1), albo wywal kompletnie/przerob.
>
> Teraz ci grozi cos takiego, ze znaki stracisz, bo sie bufor przepelni.
Dziękuję bardzo! Znacząca poprawa - po usunięciu delay(10), zamiast
kilkunastu znaków z wysłanych 50, dostałem 47...
--
Michał
-
10. Data: 2018-11-26 09:30:22
Temat: Re: Arduino, SIM900A, SMS
Od: Marek <f...@f...com>
On Sun, 25 Nov 2018 20:17:19 +0000, "Michal M. Lechanski"
<m...@d...eu> wrote:
> Kupiony na eBay więc pewnie z Chin, choć dostawa była z UK. I tutaj
> działa, tyle że narowiście... Czy sprzedawca coś z nim robił? Nie
> mam
> pojęcia.
Możesz pokazać jak wygląda, jakiś link do aukcji?
--
Marek