|
|||||||
Отправка смс сообщений с помощью Arduino и Siemens
Время создания: 23.05.2015 16:40
Автор: Лукьянов В. С.
Раздел: Компьютер - Аппаратное обеспечение - Мобильные телефоны - Siemens M50
Запись: xintrea/mytetra_syncro/master/base/1432388435eaxyb2yzds/text.html на raw.github.com
|
|||||||
|
|||||||
Не так давно я узнал о замечательном микроконтроллере Arduino у которого просто впечатляющие возможности по управлению различными периферийными устройствами (сенсоры, датчики, сервоприводы, светодиоды, реле и т.д.). Человек который далек от электроники, может с легкостью сделать простые схемы. Среда разработки Arduino IDE с упрощенным языком C, позволяет даже новичку понять принципы программирования, превращает занудный и сложный код C в легкий и доступный. Спасибо огромное моему коллеги Алексею, за предоставление в постоянное пользование телефона Siemens S45, с помощью которого мы и будем посылать сообщения. Для начала нужно приобрести или сделать самому Data-кабель. Я сделал кабель из зарядного устройства, которое шло в комплекте с телефоном. В разъеме у меня не хватало 5го и 6го контакта. Пришлось разобрать похожий разъем от другого сименса и добавить в свой. Операция заняла чуть больше 20 минут. Старые разъемы можно легко разбирать в отличии от современных из цельно-литого пластика. Следующим этапом идет подключение телефона Siemens S45 непосредственно к микроконтроллеру Arduino по схеме приведенной ниже: Как видно по схеме ничего сложного нет. В своем варианте я отдельно подключаю питание к телефону от оригинального блока питания, так как телефон отказывался заряжаться от Arduino. Теперь осталось загрузить наш скетч и попробовать отправить тестовое смс: #include <NewSoftSerial.h> #include <string.h>
NewSoftSerial mySerial(2, 3);
#define num_to_char(number) ((number) < 10 ? \ ('0' + (number)) : \ (('A' - 10) + (number)) )
#define first_four(byte) (0x0F & (byte)) #define last_four(byte) ((0xF0 & (byte)) >> 4) #define hexdump_a(byte) num_to_char( last_four(byte)) #define hexdump_b(byte) num_to_char(first_four(byte))
char inData[100];
char unitID_in[10]; char telnumb_in[14]; char textsms_in[100]; void setup() { Serial.begin(9600); Serial.println("Go SMS Send"); mySerial.begin(9600); }
void loop() { int i=0; char buffer[100]; //если есть данные - читаем if(Serial.available()){ delay(100); //загоняем прочитанное в буфер while( Serial.available() && i< 99) { buffer[i++] = Serial.read(); } //закрываем массив buffer[i++]='\0'; } //если буфер наполнен отправляем смс if(i>0){ //разбираем буфер на части отделенные запятой через сериал монитор отправляем - sms,19731429764F4,text sms sscanf(buffer, "%[^','],%[^','],%[^',']", &unitID_in, &telnumb_in, &textsms_in);
if ((String)unitID_in == "sms"){ //определяем команду отправки смс char *indata=textsms_in; send_sms(indata); unitID_in [0] = '\0'; telnumb_in [0] = '\0'; } } }
void send_sms(char *data) { size_t data_length, x; char c, l; long i; long n; data_length = strlen(data); i = data_length * 7; if (i & 0x07) i = (i & ~0x07) + 0x08; i = i / 8; mySerial.println("AT+CMGF=0"); delay(50); mySerial.print("AT+CMGS="); delay(50); mySerial.println(i + 14); delay(50); mySerial.print("0011000B9"); delay(5); mySerial.print(telnumb_in); delay(5); mySerial.print("0000AA"); hexdump_byte(data_length & 0xFF); l = 0; n = 0; for (x = 0; x < data_length; x++) { if (data[x] == '$') data[x] = 0x02; n |= (data[x] & 0x7F) << l; l += 7; if ( l >= 8 ) { hexdump_byte(n & 0xFF); l -= 8; n >>= 8; } } if (l != 0) { hexdump_byte(n & 0xFF); } mySerial.write(26); } void hexdump_byte(unsigned char byte) { mySerial.print(hexdump_a(byte), BYTE); mySerial.print(hexdump_b(byte), BYTE); } Отправка смс сообщения осуществляется через Serial Monitor. Задаем номер телефона и текст сообщения одной строкой. Данную связку — телефона и микроконтроллера Arduino можно применить в различных проектах. Например сигнализации, оповещении обонента при срабатывании различных датчиков. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|