Buon giorno,
ho montato uno shield wi fi con ESP8266 di futura elettronica al mio Arduino Uno R3.
Ho mandato uno scketch "Blink" , montato lo shield,e trammite il Serial Monitor mi sono correttamente collegato al Modem TIM Fibra.
Fino a qui tutto ok , il punto è che se carico un'altro sketch l'arduino mi si disconnette dalla COM9 dove è collegato...
Con lo Shield montato non riesco a caricare gli sketch.
Se tolgo lo Shield l'arduino funziona regolarmente.
Pensavo fosse un discorso di Alimentazione ma con esterna 9V 1A non va ugualmente.
Avete consigli??
Buona sera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentartiIN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.
Forse mi sono spiegato male.. se carico lo sketch blink su arduino collego lo shield wi fi apro il monitor seriale invio AT e lui mi risponde Ok.... Se carico un sketch di esempio tipo wifiwebserver o qualsiasi altro esempio wi fi,l' arduino si disconnette e nn risponde più lo shield al monitor seriale.... Sembra come ci sia un conflitto con qualcosa.. ...
Grazie
fabious76:
se carico lo sketch blink su arduino collego lo shield wi fi apro il monitor seriale invio AT e lui mi risponde Ok.... Se carico un sketch di esempio tipo wifiwebserver o qualsiasi altro esempio wi fi,l' arduino si disconnette e nn risponde più lo shield al monitor seriale.... Sembra come ci sia un conflitto con qualcosa.. ...
Partiamo dall'inizio.
Di QUALE shield wifi parli esattamente? (un link all'oggetto che hai acquistato, o almeno una foto)
E quindi COME lo hai connesso?
docdoc:
Partiamo dall'inizio.
Di QUALE shield wifi parli esattamente? (un link all'oggetto che hai acquistato, o almeno una foto)
E quindi COME lo hai connesso?
Esatto. Guarda porprio adesso usando dei moduli WIFI NRF24 e funzionano perfettamente
Ho provato a controllare i jumper ma a me sembrano giusti.
Però adesso c'è una novità. Se carico lo sketch esempio wifiwebserver sul monitor seriale mi scrive sempre " wi fi shield not present " con tutti i vari settaggi provati con i jumper...
No capisco.
Se vengono usati i pin 0 ed 1 per la comunicazione serial (altamente sconsigliato) perdi la possibilità di caricare i programmi con lo shield inserito.
Se NON vengono usati i pin 0 ed 1 per la comunicazione serial (consigliato) DEVI usare la libreria SoftwareSerial ed identificare bene quali pin fanno da TX e quali da RX.
Attenzione anche alla configurazione dei jumper per la SD, in particolare al SD_CS.
Infatti, se tolgo i jumper riesco a caricare i programmi , con i jumper inseriti tx sx 0 1 non riesco a caricare...
Scusa la mia ignoranza , ma se nn uso la SD ha importanza il jumper??? Non capisco come inserirlo.
Se vuoi poter caricare i programmi con lo shield inserito DEVI scegliere l'altra configurazione, ESPTX=D8 e ESPRX=D9 e quindi utilizzare la libreria SoftwareSerial per creare una seriale "viruale" sui pin 8 e 9:
SoftwareSerial mySerial(8, 9);
Se non usi la nulla sul bus SPI non hanno importanza i jumper della SD, altrimenti SI.
Guglielmo
P.S.: I pin 0 ed 1 sono la vera seriale di Arduino e sono collegati al convertitore Seriale <-> USB attraverso cui vengono caricati i programmi. Qualsiasi cosa ad essi collegata blocca quindi detto caricamento.
Ho provato con la libreria SoftwareSerial ad assegnare i pin di TX e RX ma aprendo il Serial Monitor mi scrive sempre "Shield not Present"....
Di seguito inserisco lo sketch.
#include <SPI.h>
#include <WiFi.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(8, 9);
char ssid[] = "ssid"; // your network SSID (name)
char pass[] = "pass"; // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0; // your network key Index number (needed only for WEP)
int status = WL_IDLE_STATUS;
WiFiServer server(80);
void setup() {
//Initialize serial and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// don't continue:
while (true);
}
String fv = WiFi.firmwareVersion();
if (fv != "1.1.0") {
Serial.println("Please upgrade the firmware");
}
// attempt to connect to Wifi network:
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);
// wait 10 seconds for connection:
delay(10000);
}
server.begin();
// you're connected now, so print out the status:
printWifiStatus();
}
void loop() {
// listen for incoming clients
WiFiClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("
");
}
client.println("</html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
} else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disonnected");
}
}
void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
Sullo Sketch ho inserito ssid e pass della mi WI FI
> fabious76 : ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).
In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.
Se vuoi poter caricare i programmi con lo shield inserito DEVI scegliere l'altra configurazione, ESPTX=D8 e ESPRX=D9 e quindi utilizzare la libreria SoftwareSerial per creare una seriale "viruale" sui pin 8 e 9:
che sono due jumper da posizionare correttamente, l'hai fatto?
e poi manca tutta la gestione della mySerial al posto della serial.... a cominciare da mySerial.begin(9600) in poi...
Ponticelli sono collegati 8 e 9 .
Di seguito lo sketch modificato ma che non va?
*/
#include <SPI.h>
#include <WiFi.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(8,9);
char ssid[] = "SSID"; // your network SSID (name)
char pass[] = "PASS"; // your network password
int keyIndex = 0; // your network key Index number (needed only for WEP)
int status = WL_IDLE_STATUS;
WiFiServer server(80);
void setup() {
//Initialize serial and wait for port to open:
mySerial.begin(9600);
while (!mySerial) {
; // wait for serial port to connect. Needed for native USB port only
}
// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
mySerial.println("WiFi shield not present");
// don't continue:
while (true);
}
String fv = WiFi.firmwareVersion();
if (fv != "1.1.0") {
mySerial.println("Please upgrade the firmware");
}
// attempt to connect to Wifi network:
while (status != WL_CONNECTED) {
mySerial.print("Attempting to connect to SSID: ");
mySerial.println(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);
// wait 10 seconds for connection:
delay(10000);
}
server.begin();
// you're connected now, so print out the status:
printWifiStatus();
}
void loop() {
// listen for incoming clients
WiFiClient client = server.available();
if (client) {
mySerial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
mySerial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("
");
}
client.println("</html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
} else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
mySerial.println("client disonnected");
}
}
void printWifiStatus() {
// print the SSID of the network you're attached to:
mySerial.print("SSID: ");
mySerial.println(WiFi.SSID());
// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
mySerial.print("IP Address: ");
mySerial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
mySerial.print("signal strength (RSSI):");
mySerial.print(rssi);
mySerial.println(" dBm");
}
Non va perché tu non hai capito che ...
... la seriale con cui comunichi TU via monitor seriale è e rimane "Serial"
... la seriale virtuale con cui comunica LO SHIELD è invece la "mySerial"
Quindi, tutti i messaggi a te indirizzati o tutto ciò che vuoi vedere sul monitor seriale lo devi mandare sulla "Serial", la quale, anche essa, va inizializzata nel setup(); tutti i comandi inviati ed i dati ricevuti verso/dallo shield devono invece viaggiare sulla "mySerial".
Ah ... NON credo proprio che puoi usare le libreria standard "Wifi.h" (fatta per gli Arduino WiFi shield) ... quello shield comunica con i comandi AT via seriale ... se, come ti ha già detto SukkoPera, studiassi bene la documentazione, lo avresti già scoperto ... :
Non so se hai notato, ma in Megatopic c'è un thread di oltre 180 pagine interamente dedicato al ESP8266.
Nella prima pagina troverai una serie di link a guide e tutorials che ti aiuteranno a capire come funziona quel modulo e quale libreria esattamente devi usare ...