void SmartMote::config(){ AString conf; AStringList * param = NULL; bool flag; /* se il bottone non è premuto */ if(!checkButton()){ /* ritorno */ return; } /* accendo l'uart */ openUART(); /* inizializzo il modulo come AP */ if(!m_net.initialize(AESP07::APMode)){ /* se fallisce notifico l'errore */ error(); } /* setto il nome come SmartMote e password admin */ if(!m_net.configureAP("SmartMote", "smartmote")){ /* se fallisce notifico l'errore */ error(); } /* imposto l'ip a 192.168.1.1 */ if(!m_net.setIp(AESP07::APMode, "192.168.1.1")){ /* se fallisce notifico l'errore */ error(); } /* disabilito le connessioni multiple */ if(!m_net.setMultipleConnections(false)){ /* se fallisce notifico l'errore */ error(); } /* apro il server sulla porta 8000 */ if(!m_net.listen(8000)){ /* se fallisce notifico l'errore */ error(); } /* aspetto di ricevere la stringa */ while(conf.isEmpty()){ m_net.waitForData(conf); } /* prendo i parametri */ param = conf.split(' '); /* se la stringlist è allocata correttamente */ if(param){ saveSSID(param->at(0)); saveKey(param->at(1)); saveHost(param->at(2)); RTCC.setHours(static_cast<uint32>(param->at(3).toInt32(flag))); RTCC.setMinutes(static_cast<uint32>(param->at(3).toInt32(flag))); RTCC.setSeconds(static_cast<uint32>(param->at(3).toInt32(flag))); }else{ /* altrimenti notifico l'errore */ error(); } /* spengo i led */ turnOffRed(); turnOffGreen(); }
int main( int argc, char *argv[] ) { int currentIdx = 0; createSocket(); myConnect(); openUART(); setCenter(); if( wiringPiSetup() < 0 ) { fprintf( stderr, "Unable to setup wiringPi\n" ); return 1; } fprintf( stderr, "Setup wiringPi\n" ); // create a thread for sensing, capturing pthread_create( &tid1, NULL, threadFunc1, 0 ); // for recv pthread_create( &tid2, NULL, threadFunc2, (void *)&sockfd ); for( ;; ) { waiting = 1; biSem_wait( &sem_validIdx[currentIdx] ); waiting = 0; checkStop(); while( sendFile( imageFile[currentIdx] ) == -1 ) { reconnect(); } currentIdx = 1 - currentIdx; waiting_result = 1; waiting = 1; biSem_wait( &sem_result ); waiting_result = 0; waiting = 0; checkStop(); fprintf( stderr, "Result from the server is %d\n", result ); // motor classify( result ); } myClose( sockfd ); fprintf( stderr, "Connection lost\n" ); return 0; }
void SmartMote::work(){ while(1){ /* se l'ora corrente è di scansione */ if(!(RTCC.hours() % 6) && (RTCC.minutes() >= 0x00 && RTCC.minutes() <= 0x05)){ AString data; AString message; AString answer; /* abilito il core timer (la prima volta è già abilitato) */ System::wakeCoreTimer(); /* accendo il led verde */ turnOnGreen(); /* accendo la seriale */ openUART(); /* accendo l'i2c */ openI2C(); /* prendo le misure */ data += mac(); data += luminosity(); data += ambientTempAndHum(); data += groundTemp(); data += groundHum(); data += battey(); /* compongo la stringa */ message += _PHP_CHUNK1; /* inserisco l'hostname */ message += getHost(); /* inserisco la seconda parte di richiesta http */ message += _PHP_CHUNK2; /* inserisco la lunghezza dei dati */ message += AString(static_cast<sint32>(data.size())); /* inserisco la terza parte di richiesta http */ message += _PHP_CHUNK3; /* inserisco i dati */ message += data; /* se fallisce l'inizializzazione dell'esp */ if(!m_net.initialize()){ /* notifico l'errore */ error(); } /* se fallisce l'avvio del dhcp */ if(!m_net.setDhcp(true)){ /* notifico l'errore */ error(); } /* se fallisce la connessione alla rete */ if(!m_net.joinAP(getSSID(), getKey())){ /* notifico l'errore */ error(); } /* se fallisce la connessione al server */ if(!m_net.connectToHost(getHost(), 80)){ /* notifico l'errore */ error(); } /* invio i dati */ m_net.send(message); /* aspetto l'ok */ m_net.waitForData(answer); /* notifico l'ok o lerrore dell'invio */ wasSuccess(answer); /* lascio l'ap */ m_net.leaveAP(); /* libero la memoria occupata dalle stringhe */ message.clear(); data.clear(); answer.clear(); } /* calcolo del tempo di sleep per il wifi */ m_net.sleep(getSleepTime()); /* punto la prossima sveglia */ setNextAlarm(); /* spengo il led verde */ turnOffGreen(); /* spengo l'uart */ closeUART(); /* chiudo l'i2c */ closeI2C(); /* spengo il core timer */ System::stopCoreTimer(); /* vado a dormire */ System::sleep(); } }