Wysyłanie SMS za pomocą Motorola C261

Zbiór tutoriali związanych z Arduino.
ODPOWIEDZ
Borewicz
Młodszy majsterkowicz
Posty: 11
Rejestracja: 27 wrz 2014, 10:44

Wysyłanie SMS za pomocą Motorola C261

Post autor: Borewicz » 9 gru 2016, 21:47

Ostatnimi czasy borykałem się z problemem wysyłania SMS ze starej Motoroli C261 przy użyciu Arduino. Opierałem się głównie na stronie: http://murchlabs.com/send-sms-from-your-arduino/. Mimo iż w tekście jest wyraźnie napisane, że wszystko powinno działać również na modelu C261 to nie działało. Ale może od początku ;)

Z Motorolą C261 możemy się komunikować po przez komendy AT. Należy je wysyłać portem szeregowym do telefonu. Port ten w tym modelu znajduję się w gnieździe słuchawkowym (mikro jack 2,5 mm).
mikro_jack.jpg
Port szeregowy w Arduino pracuje najczęściej w standardzie TTL czyli ma napięcia 5 V dla stanu wysokiego, 0 V dla stanu niskiego. Natomiast stan wysoki dla C261 wynosi 3,3V. W tym przypadku połączenie takie jak było podane w linku powyżej jest z góry spisane na niepowodzenie. Możliwe że Motorola C168i ma inną logikę, i stan wysoki wynosi 5V. Rozwiązaniem tego problemu jest wykorzystanie konwertera poziomów logicznych 3,3V/5V
1513-4743.jpg
Konwerter ten zmienia napięcie wychodzące z Arduino na 3,3V natomiast sygnał z Motoroli na 5V. Dzięki temu 2 urządzenia mogą się "dogadać". A więc układ który należy zmontować wygląda następująco:
Untitled Sketch_bb.png
Napięcie LVcc prawidłowo powinno iść od Motoroli C261 lecz ze względu iż nie miałem wyprowadzonego żadnego pinu z komórki z tym napięciem to podłączyłem do napięcia 3,3V w Arduino.

Poniższy kod używa biblioteki SoftwareSerial do stworzenia wirtualnego portu szeregowego na pinach 2 i 3. Dzięki temu mamy nadal dostępny sprzętowy port np. do komunikacji z terminalem.

Kod: Zaznacz cały

#include <SoftwareSerial.h>

SoftwareSerial mySerial(3, 2); // RX, TX pin

void setup() {

	pinMode(13, OUTPUT); // Initialize pin 13 as digital out (LED)

	mySerial.begin(4800); // Open serial connection at baud rate of 4800
	digitalWrite(13, HIGH); // Turn LED on.
	mySerial.println("AT"); // Sends AT command to wake up cell phone
	delay(500);
	mySerial.println("AT+CMGF=1"); // Puts phone into SMS mode
	delay(1000); // Wait a second
	mySerial.println("AT+CMGW=\"+48123456789\""); // YOUR NUMBER HERE; Creates new message to number
	delay(1000);
	mySerial.print("Sent from my Arduino."); // Message contents
	delay(1000);
	mySerial.write(byte(26)); // (signals end of message)
	delay(1000);
	mySerial.println("AT+CMSS=1"); // Sends message at index of 1
	digitalWrite(13, LOW); // Turn LED off
	delay(250);
	digitalWrite(13, HIGH); // Turn LED on.
	delay(10000); // Give the phone time to send the SMS
	mySerial.println("AT+CMGD=1"); // Deletes message at index of 1
	digitalWrite(13, LOW); // Turn LED off.
	delay(250);

}

void loop(){

}
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Ostatnio zmieniony 9 gru 2016, 23:17 przez Borewicz, łącznie zmieniany 1 raz.

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
Marhef
Złota rączka
Posty: 1075
Rejestracja: 18 lis 2011, 02:18

Re: Wysyłanie SMS za pomocą Motorola C261

Post autor: Marhef » 9 gru 2016, 22:11

A może powinieneś sygnał Tx podłączyć do pinu Rx? W komunikacji UART w większości przypadków tak się robi
Borewicz
Młodszy majsterkowicz
Posty: 11
Rejestracja: 27 wrz 2014, 10:44

Re: Wysyłanie SMS za pomocą Motorola C261

Post autor: Borewicz » 9 gru 2016, 23:14

Słuszna uwaga. Ogólnie system działa więc zapewne rysunek mikro jacka źle zrobiłem. Zaraz poprawie.
ODPOWIEDZ

Strony partnerskie: