collapse

* Posts Recentes

LLM Crawlers por jm_araujo
[Ontem às 21:57]


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]

Autor Tópico: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.  (Lida 75252 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 #90 em: 13 de Agosto de 2012, 20:37 »
É suposto receberes alguma coisa.


eu com este codigo que voces me deram:
Código: [Seleccione]
/*
HARDWARE SETUP
13 -Led pin Debug 13 (used for status)
*/

#define ledPin 13 //Used for DEBUG
char info[200];
int index = 0;
char inChar;

void setup() 
{
  pinMode(ledPin,OUTPUT); // LED DEBUG
  Serial.begin(19200);  // 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()) Serial.write(Serial3.read());
}

nao recebi nada no serial monitor

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #91 em: 13 de Agosto de 2012, 20:42 »
Tenta enviar "AT+CMGR=0" ou "AT+CMGR=1". Serve para ler um determinado SMS. Vê se obtens alguma resposta.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #92 em: 13 de Agosto de 2012, 20:44 »
Tenta enviar "AT+CMGR=0" ou "AT+CMGR=1". Serve para ler um determinado SMS. Vê se obtens alguma resposta.


recebi isto


AT+CMGR=1

+CMGR: 1,,156
07915391260100000406D0D4A613390021802181057240A065EB530B2A4F9B53908C86D6819A65F73CCC4E93C3E432C81D7E83CCEF34885C16A7E9617218047FCB41E6309B1E0691CBA079984D7EBB40D0B03C0C1ABFDDF4B4BB1E9683C22073981D9683CAA0B2DB9E0ECB41D3E614749687E9E93908FE028541F232B90CA2B7DD2072D95E06D1CB72D03CCC26BF41EDB43BDD7E83C86550B12A95C15CA020BD0C52875D

OK

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #93 em: 13 de Agosto de 2012, 20:46 »
É esta mensagem:
eVOZ eSMS 24h: Mensalidade nao foi debitada por falta de saldo. Para continuar a falar e enviar SMS gratis p/ a rede tmn deve ter saldo minimo de EUR20. Ate ja.

O AT+CMGR=0 não funcionou? A minha dúvida é se isso corresponde à SMS mais recente ou há mais antiga.

EDIT:
Dá uma vista de olhos nisto:
http://www.developershome.com/sms/howToReceiveSMSUsingPC.asp
e nisto:
http://alumni.ipt.pt/~pmad/s35i_c35i_m35i_atc_commandset_v01.pdf

Acho que se enviares "AT+CNMI" recebes as mensagens novas.
« Última modificação: 13 de Agosto de 2012, 20:52 por Pedrock »

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #94 em: 13 de Agosto de 2012, 21:00 »
Alterei o código desse link. Inicializa na mesma o telemóvel pelo serial monitor. Quando estiver pronto para enviar a sms envia pelo serial monitor o texto "sms". Dentro de uns segundos deves receber uma sms. Ah, altera também o número na variável numero (não apagues o 351).

Depois diz se funcionou.

Se funcionar passamos a próxima fase.

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];
int index = 0;
char inChar;
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) {
        if (String(info) == "sms") {
          send_sms(numero,"teste");
        } else {
          Serial3.println(String(info));
          index = 0;
          memset( &info, 0, sizeof(info) );
          break;
        }
      }
    }
  }
  if (Serial3.available()) Serial.write(Serial3.read());
}

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);
 
}
Olha, experimenta isto:
AT+CMGL=0

Serve para ver o index das sms que ainda não leste. Experimenta e diz o que obteste.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #95 em: 13 de Agosto de 2012, 21:08 »
Alterei o código desse link. Inicializa na mesma o telemóvel pelo serial monitor. Quando estiver pronto para enviar a sms envia pelo serial monitor o texto "sms". Dentro de uns segundos deves receber uma sms. Ah, altera também o número na variável numero (não apagues o 351).

Depois diz se funcionou.

Se funcionar passamos a próxima fase.

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];
int index = 0;
char inChar;
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) {
        if (String(info) == "sms") {
          send_sms(numero,"teste");
        } else {
          Serial3.println(String(info));
          index = 0;
          memset( &info, 0, sizeof(info) );
          break;
        }
      }
    }
  }
  if (Serial3.available()) Serial.write(Serial3.read());
}

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);
 
}
Olha, experimenta isto:
AT+CMGL=0

Serve para ver o index das sms que ainda não leste. Experimenta e diz o que obteste.


com esse codigo nada do que escrevo no serialmonitor retorna... nem o AT

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #96 em: 13 de Agosto de 2012, 21:13 »
Alterei o código desse link. Inicializa na mesma o telemóvel pelo serial monitor. Quando estiver pronto para enviar a sms envia pelo serial monitor o texto "sms". Dentro de uns segundos deves receber uma sms. Ah, altera também o número na variável numero (não apagues o 351).

Depois diz se funcionou.

Se funcionar passamos a próxima fase.

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];
int index = 0;
char inChar;
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) {
        if (String(info) == "sms") {
          send_sms(numero,"teste");
        } else {
          Serial3.println(String(info));
        }
        index = 0;
        memset( &info, 0, sizeof(info) );
        break;
      }
    }
  }
  if (Serial3.available()) Serial.write(Serial3.read());
}

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);
 
}
Olha, experimenta isto:
AT+CMGL=0

Serve para ver o index das sms que ainda não leste. Experimenta e diz o que obteste.

Tinha-me enganado numa parte do código, experimenta agora com este.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #97 em: 13 de Agosto de 2012, 21:18 »
Acontece a mesma coisa,
Nao sei se te era melhor guiares por este codigo aqui:

http://webgsmremotecontrol.webs.com/arduinogsmcode.htm

parece tar mais simplificado.

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #98 em: 13 de Agosto de 2012, 21:22 »
atencao....

agora funcionou alterei o teu baundrate 9600 para o 19200 e retornou isto
at

OK
AT+CMGF=0

OK
AT+CMGS=19

> 0011000C915391460012670000AA05F4

e RECEBI A MSG

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #99 em: 13 de Agosto de 2012, 21:24 »
Ah, já não sabia o que fazer porque o código estava correto.

Experimenta isto e diz o que obtiveste:
AT+CMGF=0

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #100 em: 13 de Agosto de 2012, 21:29 »
Ah, já não sabia o que fazer porque o código estava correto.

Experimenta isto e diz o que obtiveste:
AT+CMGF=0


retorna me OK

Offline rglove

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

Offline r16

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


AT+CMGL=0

+CMGL: 5,0,,146
079153912601000004008000002180319173114097206A91598426B5DA20C8F8940641C8A734380585CF6F79185476D3E5E573B8FD9E83CA6DD0383C0F83C2F432283C07C9686810FD4D7ECF41EF39889C0ECF41E430685E6E87DD61103B7DAE9741EA3068FC6EC3E565500C044FEBF56150BB4C4E8751B4B4FB9C2A83E4E571591C06BDEB747918749687E9E939885E66CB62B9180E07C3DD00

OK

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #103 em: 13 de Agosto de 2012, 21:40 »
079153912601000004008000002180319173114097206A91598426B5DA20C8F8940641C8A734380585CF6F79185476D3E5E573B8FD9E83CA6DD0383C0F83C2F432283C07C9686810FD4D7ECF41EF39889C0ECF41E430685E6E87DD61103B7DAE9741EA3068FC6EC3E565500C044FEBF56150BB4C4E8751B4B4FB9C2A83E4E571591C06BDEB747918749687E9E939885E66CB62B9180E07C3DD00
Corresponde a:
TELEPIZZA FORA HORAS agora entregamos em casa ate as 24h todos os dias da semana ligue ja compre 1 pizza media(4ing)e receba outra gratis tel219188087

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Ajuda Siemens C35i, como o ligar ao arduino, comandos AT.
« Responder #104 em: 13 de Agosto de 2012, 21:41 »
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?