hai ragione, vedendo che ai byte c'era affianco una lettera pensavo seguissero la tabella ascii.
Allora la soluzione "stupida" è raggrupare 2 a 2 i byte ed inviarli usando la SimpleWriteln(int) ma funziona solo se il numero di byte è pari (mi pare di sì nel caso dei tuoi messaggi)
per esempio
int i, mess;
for (i=0;i<lunghezzaArray;i+=2){
mess = ((int)connectMessage[i])<<8+connectMessage[i+1];
gsm.SimpleWriteln(mess);
}
la soluzione "difficile" è modificare la libreria per "magiarsi" anche gli array di byte (oppure sempre di char ma specificando la lunghezza, bypassando così il tappo delle stringhe)
non mi pare ci fosse, ma quella libreria a sua volta si poggiava su un'altra libreria(quindi alla fine erano 3 librerie una sopra l'altra), che essendo più "basso livello" dovrebbe avere il metodo, ora controllo
edit: come non detto, anche la libreria più a basso livello lavora con le stringhe, per via del fatto che sono comandi AT. però giaà nella libreria SIM900 si può notare un oggetto _cell, che poi sarebbe la seriale che è collegata con il modulo GSM (SoftwareSerial)...
quindi in SIM900.h aggiungi:
void SimpleWrite(byte *comm, int len);
e in SIM900.cpp
void SIMCOM900::SimpleWrite(byte *comm, int len)
{
_cell.write(comm, len);
}
dopo di che potrei usare tranquillamente gli array byte così
gsm.SimpleWriteln(connectMessage, 18); //18 è il numero di byte da scrivere
Ciao, allora ho provato a fare il tutto, risolto problema in compilazione, ma invio il messaggio di connect al server ma questo non mi risponde, allora ho fatto delle prove su un server di un mio amico e ho verificato che dopo aver avviato la connessione TCP, regolarmente accettata dal server, qualunque cosa invio al server questi non riceve nulla; Viceversa se il server manda qualcosa a me io la ricevo.
Ho provato anche a mandare una semplice stringa di caratteri tramite il comando SimpleWrietln ma nulla.
Ho fatto una prova con il metodo get della libreria inetGsm e in quel caso il server riceve le stringhe che si trovano nel metodo.
Non mi capacito quale sia la differenza e del perchè questo avvenga.
Potete illuminarmi!!!??? =(
l'unica divverenza che noto è il carattere di "a capo" che viene aggiunto attraverso la println. Quindi dovresti modificare
void SIMCOM900::SimpleWrite(byte *comm, int len)
{
_cell.write(comm, len);
}
in
void SIMCOM900::SimpleWrite(byte *comm, int len)
{
_cell.write(comm, len);
_cell.write('\n', 1); //aggiunge il carattere "a capo"
}
però a questo punto ho paura a cosa possa succedere se in mezzo al comando ci sia un valore che corrisponda all'a-capo.. tutto dipende da come interpreta i dati il chip GSM, bisognerebbe vedere che succede a basso livello (libreria gsm.h) però ora sono a lavoro.
@lesto: sicuro di poter usare _cell.write('\n', 1) ?non so com'è fatta la libreria,ma ho paura che facendo così usi 13 o 10(valore asci dell'acapo) come indirizzo per cercarsi il vettore di array..
Allora ho provato ha cambiare il metodo come mi avete consigliato, ma purtroppo non funziona mi dà errore in compilazione, quindi ho pensato di inserire nel codice del programma /n direttamente con il SimpleWrite, ho provato a inviare questo connectMessage a cosm, ma questi dopo aver accettato la connessione TCP non risponde nulla, invece secondo il protocollo MQTT dovrebbe rispondere con dei connectACK sia nel caso in cui accetti la richiesta sia nel caso in cui il connectMessage sia sbagliato, quindi mi sorge il dubbio che al server ancora non arriva nulla.
Come posso verificare se il server riceve i byte che gli mando?
Ragazzi veramente grazie per la pazienza e il supporto che mi state dando :P!!!
Ho scaricato il programma che mi hai detto hai idea di come posso fare l'analisi della connessione con il gsm di arduino?
Scusa se ti rompo, ma ho visto che sembra abbastanza complicato, quindi magari se tu avevi già esperienza potevi velocizzarmi un pò la cosa.
Cmq ottimo programma, stò analizzando il traffico del mio cpu ed è veramente perfetto per quello che serve a me, il problema è far analizzare il traffico sul gsm...
Ciao, scusa hai ragione, sono stato un pò vago, in pratica sono riuscito finalmente ad inviare al mio server di prova una stringa, adesso stavo cercando di scrivere un metodo per farlo, è ho un errore in compilazione:
error: extra qualification 'InetGSM::' on member 'mqttConnect'
il metodo è il seguente:
int InetGSM::mqttConnect(const char* server, int port, char* msg,char* result, int resultlength)
{
boolean connected=false;
int n_of_at=0;
int length_write;
char end_c[2];
end_c[0]=0x1a;
end_c[1]='\0';
L'errore che avevo era dovuto a una scrittura sbagliata del prototipo del metodo, adesso funziona e riesco ad inviare dati al server sotto forma di stringa, adesso provo con i byte e vedo che succede...