Aktywne Wpisy
mirko_anonim +71
✨️ Obserwuj #mirkoanonim
Chłop pracuje fizycznie, ale dostał propozycję awansu. Przejście z "fizycznego" na "umysłowego" (stanowisko kierownicze). Były pewne wymagania i warunki, które chłop spełnił po krótkim przyuczeniu.
Niestety w trakcie wprowadzania na nowe stanowisko zaczęło się pojawiać coraz więcej nowych problemów i spraw, z którymi chłop w ogóle by nie chciał mieć do czynienia. Na zasadzie "żaden awans i żadna podwyżka nie przekona mnie do tego, żeby na co dzień zajmować
Chłop pracuje fizycznie, ale dostał propozycję awansu. Przejście z "fizycznego" na "umysłowego" (stanowisko kierownicze). Były pewne wymagania i warunki, które chłop spełnił po krótkim przyuczeniu.
Niestety w trakcie wprowadzania na nowe stanowisko zaczęło się pojawiać coraz więcej nowych problemów i spraw, z którymi chłop w ogóle by nie chciał mieć do czynienia. Na zasadzie "żaden awans i żadna podwyżka nie przekona mnie do tego, żeby na co dzień zajmować
7ujMejster +290
Złożyłem sobie układ z ESP8266 (Wemos D1 mini) + moduł SIM800L. Tylko jako ze jestem zielony w programowaniu Arduino mam problem z działaniem programu.
Potrzebuje żeby ESP8266 wysłał SMS po podaniu stanu wysokiego na port 13 (D7). Wgrałem taki szkic:
#include
//piny na których jest podłączona komunikacja z modułem GSM //rx - tx (TX GSM DO 11 / RX GSM DO 12)
SoftwareSerial gsm800(4,0);
void setup() {
Serial.begin(9600);
//definiujemy PIN, gdzie podłączamy czuję ruchu - nie wszystkie złącza potrafią wybudzić urządzenie
pinMode(13, INPUT);
//definiujemy przerwanie, obsługujące alarm
attachInterrupt(digitalPinToInterrupt(13),alarm,RISING);
while(!Serial);
gsm800.begin(9600);
delay(100);
gsm800.write("AT+CMGF=1\r\n");
delay(100);
//wpisujemy numer telefonu pod który nasze urządzenie ma wysyłaś SMS
gsm800.write("AT+CMGS=\"+485006*****\"\r\n");
delay(100);
//treść wiadomości podczas startu systemu, ma na celu zweryfikowanie czy całość działa poprawnie
gsm800.write("START SYSTEMU");
delay(100);
gsm800.write((char)26);
delay(100);
}
void alarm(){
gsm800.write("AT+CMGF=1\r\n");
delay(1000);
//wpisujemy numer telefonu pod który nasze urządzenie ma wysyłać SMS
gsm800.write("AT+CMGS=\"+485006******\"\r\n");
delay(1000);
//treść wiadomości w przypadku alarmu
gsm800.write("ALARM");
delay(1000);
gsm800.write((char)26);
delay(1000);
}
void loop() {
delay(1000);
}
Ale moduł wpada w panikę bo coś z przerwaniem jest nie tak:
13:19:41.137 -> --------------- CUT HERE FOR EXCEPTION DECODER ---------------
13:19:41.184 -> ⸮⸮ISR not in IRAM!
13:19:41.278 ->
13:19:41.278 -> User exception (panic/abort/assert)
13:19:41.325 -> --------------- CUT HERE FOR EXCEPTION DECODER ---------------
13:19:41.419 ->
13:19:41.419 -> Abort called
13:19:41.419 ->
13:19:41.419 -> >>>stack>>>
Po zakomentowniu: "attachInterrupt(digitalPinToInterrupt(13),alarm,RISING);" moduł wysyła SMS o starcie systemu.
#arduino #esp8266 #elektronika
@Camis: przeczytałeś instrukcję używania przerwań w ESP?
https://randomnerdtutorials.com/interrupts-timers-esp8266-arduino-ide-nodemcu/
ICACHE_RAM_ATTR void alarm(){ ... }
https://majsterkowo.pl/alarm-z-powiadomieniem-sms-arduino/
Gdzie to wrzucić i jak dokładnie?, tak jak pisałem nie umiem w Arduino ( ͡° ͜ʖ ͡°)
ICACHERAMATTR void alarm(){ ... }
tam, gdzie teraz jest samo:
void alarm(){ ... }
Chyba logiczne. I oznaczaj kogo pytasz, bo możesz się odpowiedzi nie doczekać.
alarm()
zrobienie jednej prostej rzeczy - ustawienie globalnej flagi "jest alarm" - a w pętli głównej sprawdzanie "jeśli jest flaga "jest alarm" to wykonaj to wysyłanie i skasuj tą flagę, i odczekaj np 1s" (by ciKod tylko dzwonienie: https://pastebin.com/yeq2EBQr
Kod wysyłka SMS: https://pastebin.com/8iWbbdht
Jak to prosto połączyć?.