collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[30 de Abril de 2024, 15:09]


Circuito Microfone que funcione por almamater
[27 de Abril de 2024, 17:14]


Arame de Estendal por almamater
[18 de Abril de 2024, 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]

Autor Tópico: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.  (Lida 75226 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #105 em: 13 de Agosto de 2012, 21:48 »
Ups, enganei-me. Queria dizer para testares isto:
AT+CMGL=0


AT+CMGL=0

+CMGL: 5,0,,146
079153912601000004008000002180319173114097206A91598426B5DA20C8F8940641C8A734380585CF6F79185476D3E5E573B8FD9E83CA6DD0383C0F83C2F432283C07C9686810FD4D7ECF41EF39889C0ECF41E430685E6E87DD61103B7DAE9741EA3068FC6EC3E565500C044FEBF56150BB4C4E8751B4B4FB9C2A83E4E571591C06BDEB747918749687E9E939885E66CB62B9180E07C3DD00

OK


Ok, isso significa que a sms com index 5 está com o estado 0 (não lida) e tem 146 caracteres.
E isso que está por baixo é o código PDU da mensagem.

Experimenta outra vez o mesmo para ver se retorna alguma coisa, porque não sei se o telemóvel já classificou essa sms como lida.

Depois é ver o que retorna quando não há sms lidas e de x em x segundos por exemplo ir verificando se há sms novas. Caso haja lê-se.
Já agora, tu queres que qualquer número possa enviar a sms ou apenas o teu número?

agora envie uma msg do meu telemovel para o siemens retornou
AT+CMGL=0

+CMGL: 1,0,,30
07915391131213F4040C915391460012670000218031125383400CCCFAFC2D7F8BDFF4F4380C

OK

se tu abrires o conversor pdu
http://twit88.com/home/utility/sms-pdu-encode-decode

ele decifrou isto:


SMSC#+35193121314
Sender:+351964002176
TimeStamp:13/08/12 21:35:38
TP_PID:00
TP_DCS:00
TP_DCS-popis:Uncompressed Text
class:0
Alphabet:Default

Lusorobotica
Length:12


Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #106 em: 13 de Agosto de 2012, 22:01 »
Excelente, mas agora volta a fazer a mesma coisa, mas sem sms por ler. Para poder ver o que é que recebes se não houver sms para ler para poder programar para quando ler x acontecer y.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #107 em: 13 de Agosto de 2012, 22:09 »
Excelente, mas agora volta a fazer a mesma coisa, mas sem sms por ler. Para poder ver o que é que recebes se não houver sms para ler para poder programar para quando ler x acontecer y.

sem sms ele nao retorna nada...

mas se vires aqui neste no site  que abocado te tinha dado.
http://webgsmremotecontrol.webs.com/arduinogsmcode.htm

ele tem assim:
if (readString.indexOf(admin)>0 && readString.indexOf("36F770C")>0)// admin number and     //pdu on1
              {
                 //digitalWrite(indicatorPin, HIGH);//only for test
                 pulsesIR_Toyotomi.SendACCodeOn();//AC Toyotomi on
                 delay(5000);
                 //sendsms_temp();//send sms to admin temperature room

ou seja o "Pdu on1" que esta a vermelho codificado da:
3C6F770

nós podiamos fazer semelhante nao?
quando ele receber 3C6F770 enviava aquela palavra sms que puseste que me enviaste a mensagem. que tal?

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #108 em: 13 de Agosto de 2012, 22:12 »
Sim, a ideia era essa. Mas queres que ele receba de qualquer número a sms ou só de um?
Se for só de um é muito simples, se quiseres que ele receba de mais números já é mais complicado, mas nada que não se faça.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #109 em: 13 de Agosto de 2012, 22:14 »
Sim, a ideia era essa. Mas queres que ele receba de qualquer número a sms ou só de um?
Se for só de um é muito simples, se quiseres que ele receba de mais números já é mais complicado, mas nada que não se faça.

Para ja so do meu.

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #110 em: 13 de Agosto de 2012, 22:37 »
Ok, então envia a sms com o texto que queres do teu telemóvel para o cartão do siemens e lê com o comando que te tinha dito antes.
Posta aqui os resultados.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #111 em: 13 de Agosto de 2012, 22:45 »
Ok, então envia a sms com o texto que queres do teu telemóvel para o cartão do siemens e lê com o comando que te tinha dito antes.
Posta aqui os resultados.


AT+CMGL=0

+CMGL: 1,0,,27
07915391131213F4040C9153914600126700002180312213114009ECF4392C07B1EB7A

OK


descodificado da isto:



SMSC#+35193121314
Sender:+351964002176
TimeStamp:13/08/12 22:31:11
TP_PID:00
TP_DCS:00
TP_DCS-popis:Uncompressed Text
class:0
Alphabet:Default

ligar luz
Length:9



Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #112 em: 13 de Agosto de 2012, 23:17 »
Código: [Seleccione]
#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))

int ledPin = 13; //Used for DEBUG
boolean flagLUZoff=false;
boolean flagSMS=false;
char info[200];
char info1[400];
char info2[] = "07915391131213F4040C915391460012670000";
int index = 0;
char inChar;
char inChar1;
char numero[13] = "351999999999";
void setup() 
{
  pinMode(ledPin,OUTPUT); // LED DEBUG
  Serial.begin(9600);  // DEBUG
  Serial3.begin(19200);
}

void loop() // run over and over
{
  if (Serial.available()>0) {
    while (1) {
      inChar = Serial.read();
      info[index] = inChar;
      index++;
      delay(2);
      if (Serial.available() <= 0) {
          Serial3.println(String(info));
          index = 0;
          memset( &info, 0, sizeof(info) );
          break;
      }
    }
  }
  Serial3.println("AT+CMGL=0");
  delay(10);
  if (Serial3.available()>0) {
    while (1) {
      inChar1 = Serial3.read();
      info1[index] = inChar1;
      index++;
      delay(2);
      if (Serial3.available() <= 0) {
          if (String(info2).indexOf(String(info1))>0) {
            digitalWrite(13,HIGH);
            Serial.println("Led ligado");
          }
          index = 0;
          memset( &info1, 0, sizeof(info1) );
          break;
      }
    }
  }
}

void hexdump_byte(unsigned char byte)
{
  Serial3.write(hexdump_a(byte));
  Serial3.write(hexdump_b(byte));
}

void convertPhone(char *pho){
  size_t data_length,y;
  data_length = strlen(pho);
  for (y = 0; y < data_length; y=y+2)
    {
      Serial3.write(pho[y+1]);
      Serial3.write(pho[y]);
    }
}

void send_sms(char *recPhone, char *data)
{
  size_t data_length, x;
  char l;
  long i;
  long n;

  data_length = strlen(data);
  i = data_length * 7;

  /* Round i up to a multiple of 8 */
  if (i & 0x07) i = (i & ~0x07) + 0x08;

  /* Calculate the number of message octets */
  i = i / 8;

  Serial3.println("AT+CMGF=0");
  delay(1500);
  Serial3.print("AT+CMGS="); // Send SMS Comand
  //phone.print("AT+CMGW=");  //Send SMS to mobile draft folder (DEBUG)
  delay(1500);
  Serial3.println(i + 14); //change it if necessary (see example below) Fixed number for 12 digits phone.
  delay(1500);
 

 
  Serial3.print("0011000C91"); // using the convertPhone function , for phones # with digits =12, like all numbers in Portugal.
  convertPhone(recPhone);
  Serial3.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);
  }
  // Code changed for Arduino v1.0
  Serial3.write(0x1A); // Ctrl+Z
  Serial3.write(0x0D); // CR
  Serial3.write(0x0A); // LF
  delay(5000);
 
}

Experimenta esse código. Mandas a tal sms (manda como mandaste antes, em minusculas) e vê se o led do arduino acende. Se não acender diz. Abre o serial monitor na mesma para ver se recebes a mensagem Led ligado.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #113 em: 13 de Agosto de 2012, 23:23 »
com esse codigo o serialmonitor nao retorna nada, nem o comando AT.

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #114 em: 13 de Agosto de 2012, 23:26 »
Mas mandaste a sms? Com esse código não ves nada do que ele retorna, apenas recebes uma mensagem a dizer que o led acendeu quando ele receber a sms, experimenta.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #115 em: 13 de Agosto de 2012, 23:30 »
Mas mandaste a sms? Com esse código não ves nada do que ele retorna, apenas recebes uma mensagem a dizer que o led acendeu quando ele receber a sms, experimenta.

sim enviei a mensagem tal como tinha enviado anteriormente.

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #116 em: 13 de Agosto de 2012, 23:33 »
rglove
Estive a ver o código e acho que não está bem.

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #117 em: 13 de Agosto de 2012, 23:35 »
É preciso enviar algum comando para iniciar o telemóvel? Ou pode-se logo enviar o comando para ler as sms?

Código: [Seleccione]
#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))

int ledPin = 13; //Used for DEBUG
boolean flagLUZoff=false;
boolean flagSMS=false;
char info[200];
char info1[400];
char info2[] = "07915391131213F4040C915391460012670000";
int index = 0;
char inChar;
char inChar1;
char numero[13] = "351999999999";
void setup() 
{
  pinMode(ledPin,OUTPUT); // LED DEBUG
  Serial.begin(9600);  // DEBUG
  Serial3.begin(19200);
}

void loop() // run over and over
{
  if (Serial.available()>0) {
    while (1) {
      inChar = Serial.read();
      info[index] = inChar;
      index++;
      delay(2);
      if (Serial.available() <= 0) {
          Serial3.println(String(info));
          index = 0;
          memset( &info, 0, sizeof(info) );
          break;
      }
    }
  }
  if (Serial3.available()>0) {
    while (1) {
      inChar1 = Serial3.read();
      info1[index] = inChar1;
      index++;
      delay(2);
      if (Serial3.available() <= 0) {
          Serial.println(String(info1));
          if (String(info2).indexOf(String(info1))>0) {
            digitalWrite(13,HIGH);
            Serial.println("Led ligado");
          }
          index = 0;
          memset( &info1, 0, sizeof(info1) );
          break;
      }
    }
  }
}

void hexdump_byte(unsigned char byte)
{
  Serial3.write(hexdump_a(byte));
  Serial3.write(hexdump_b(byte));
}

void convertPhone(char *pho){
  size_t data_length,y;
  data_length = strlen(pho);
  for (y = 0; y < data_length; y=y+2)
    {
      Serial3.write(pho[y+1]);
      Serial3.write(pho[y]);
    }
}

void send_sms(char *recPhone, char *data)
{
  size_t data_length, x;
  char l;
  long i;
  long n;

  data_length = strlen(data);
  i = data_length * 7;

  /* Round i up to a multiple of 8 */
  if (i & 0x07) i = (i & ~0x07) + 0x08;

  /* Calculate the number of message octets */
  i = i / 8;

  Serial3.println("AT+CMGF=0");
  delay(1500);
  Serial3.print("AT+CMGS="); // Send SMS Comand
  //phone.print("AT+CMGW=");  //Send SMS to mobile draft folder (DEBUG)
  delay(1500);
  Serial3.println(i + 14); //change it if necessary (see example below) Fixed number for 12 digits phone.
  delay(1500);
 

 
  Serial3.print("0011000C91"); // using the convertPhone function , for phones # with digits =12, like all numbers in Portugal.
  convertPhone(recPhone);
  Serial3.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);
  }
  // Code changed for Arduino v1.0
  Serial3.write(0x1A); // Ctrl+Z
  Serial3.write(0x0D); // CR
  Serial3.write(0x0A); // LF
  delay(5000);
 
}

Experimenta. Envia o tal comando para ler a sms e vê se recebes alguma coisa no serial monitor.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #118 em: 13 de Agosto de 2012, 23:35 »
ve la se a ti nao te era mais facil alterares este...pelo menos agora para a questao de acionar o pino 13 quando se recebe o texto.

apenas ai nesse codigo tens que por em pdu o meu numero de telemovel.
e depois ca na linha debaixo o texto ligar luz em pdu tambem.

nao achas este caminho mais facil?

Código: [Seleccione]
//int IRledPin=13; //IR Led pin
 int indicatorPin=13; //Indicator Led pin
 String readString;
 String admin="xxxxxxxxxx"; //admin number pdu code example 30123456 -> 03214365


 char c;
 
 void delsms(){
    Serial.println("AT+CMGD=1");//Delete sms
    }
 void readsmsAT(){
   Serial.println("AT+CMGR=1");//Read sms AT command
   delay(3000);
   }
 

   

    Serial.print(newhightemp2,HEX);

 
   void setup() {
         
  //pinMode(IRledPin,OUTPUT);
  pinMode(indicatorPin,OUTPUT);
  delay(12000);//first time connect cable arduino with phone...
  Serial.begin(9600);
  delay(3000);
  Serial.println("AT+CPMS=\"ME\",\"SM\"");//Set memory phone
  delay(3000);
  Serial.println("ATE=0");//Echo off
  delay(3000);
 
}

   void loop()
  {
       readString=0;//format readString...
       readsmsAT();
     
      // read phone reply if available
    while(Serial.available() > 0)
            {
                c=Serial.read(),BYTE;
                readString+=c;
            }
               delay(1000);
               
               Serial.println(readString);//serial monitor display sms pdu format
               
               delay(3000);
              if (readString.indexOf(admin)>0 && readString.indexOf("36F770C")>0)// admin number and     //pdu on1
              {
                 digitalWrite(indicatorPin, HIGH);//only for test
                 
                 delay(5000);
                 /
              }
             
              delsms();
          }
              delay(10000);//delay start loop again for check new sms...

  }


pelo o que vejo o codigo ta sempre a checar o loop le a mensagem faz o que tem a fazer e apaga logo a mensagem.. assim nao fico ca caixa cheia.

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #119 em: 13 de Agosto de 2012, 23:36 »
rglove
Estive a ver o código e acho que não está bem.

Provavelmente, em que parte?