Sari la conținut
ELFORUM - Forumul electronistilor

Masă comună pentru surse multiple


Lilith

Postări Recomandate

Cu programarea am incercat cateva variante, ideea e ca pe internet am gasit tot felul de optiuni. Una dintre ele ar fi ca pot incarca Bare minimum in arduino si dupa sa deschid monitorul serial si la introducerea comenzii AT ar trebui sa primesc mesaju Ok. Pe alt tutorial mi se arata ca trebuia conectat Rx la Rx si Tx la Tx.

Link spre comentariu
  • Răspunsuri 35
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Lilith

    16

  • Liviu M

    15

  • BRANCA

    2

  • validae

    1

Top autori în acest subiect

Imagini postate

Intrebarea e daca in ESPP8266 chiar e programat ceva.

Pe de alta parte, cand conectezi Arduino la PC (ca sa te joci cu monitorul serial), folosesti aceeasi interfata seriala in paralel pentru doua conexiuni (PC si ESP8266) si nu stiu daca e "functionala" in modul asta.

Link spre comentariu

Ar mai fi ceva, ieri mi-am asamblat tot proiectul si am introdus codul de mai jos sa-l testez, dar nu a mers, dar de fiecare data cand activez hotspot-ul esp-ul se conecteaza automat la el.

 

SoftwareSerial espSerial = SoftwareSerial(2,3); 
float sensor=A0;
float gas_value;
String apiKey = "5G0NEIEWV7FQWERTY"; 
String ssid="kavin"; // Wifi network SSID
String password ="12345612"; 
boolean DEBUG=true;
#define VOLTAGE_MAX 5.0
#define VOLTAGE_MAXCOUNTS 1023.0


void showResponse(int waitTime){
	long t=millis();
	char c;

	while (t+waitTime>millis()){
		if (espSerial.available()){
			c=espSerial.read();
			if (DEBUG) Serial.print(c);
		}
	}
}



boolean thingSpeakWrite(float value1){

	String cmd = "AT+CIPSTART=\"TCP\",\""; // TCP connection

	cmd += "184.106.153.149"; // api.thingspeak.com
	cmd += "\",80";

	espSerial.println(cmd);

	if (DEBUG) Serial.println(cmd);

	if(espSerial.find("Error")){
		if (DEBUG) Serial.println("AT+CIPSTART error");
		return false;
	}

	String getStr = "GET /update?api_key="; // prepare GET string

	getStr += apiKey;
	getStr +="&field1=";
	getStr += String(value1);
	//getStr +="&field2=";
	//getStr += String(value2);
	// ...

	getStr += "\r\n";

	// send data length
	cmd = "AT+CIPSEND=";
	cmd += String(getStr.length());

	espSerial.println(cmd);

	if (DEBUG) Serial.println(cmd);
	delay(100);

	if(espSerial.find(">")){
		espSerial.print(getStr);
		if (DEBUG) Serial.print(getStr);
	}	else{
		espSerial.println("AT+CIPCLOSE");

		// alert user
		if (DEBUG) Serial.println("AT+CIPCLOSE");
		return false;
	}

	return true;
}



void setup() {

	DEBUG=true;l


	pinMode(LED_BUILTIN, OUTPUT);
	pinMode(sensor,INPUT);

	Serial.begin(9600);

	espSerial.begin(115200); // enable software serial

	espSerial.println("AT+CWMODE=1"); // set esp8266 as client
	showResponse(1000);

	espSerial.println("AT+CWJAP=\""+ssid+"\",\""+password+"\""); // set your home router SSID and password
	showResponse(5000);

	if (DEBUG) Serial.println("Setup completed");
}



void loop() {
	gas_value=analogRead(sensor);

	Serial.println(gas_value);
	delay(1); //delay in between reads for stability

	if(gas_value>250){
		digitalWrite(LED_BUILTIN, HIGH);
		delay(250);

		digitalWrite(LED_BUILTIN, LOW);
		delay(250);

		float t = gas_value*(VOLTAGE_MAX / VOLTAGE_MAXCOUNTS); //convert gas value to voltages

		if (isnan(t)) {

			if (DEBUG) Serial.println("Failed to read from MQ5");
		}
		else{

			if (DEBUG) Serial.println("Voltage="+String(t));
			thingSpeakWrite(t); // Write values to thingspeak
		}
		delay(20000);
	}
	else{

		digitalWrite(LED_BUILTIN, LOW);
	}

 

Editat de ratza
Cod marcat pentru a fi mai uşor de citit
Link spre comentariu

Cu asta am incercat sa testez comunicatia dintre cele doua, dar imi da ERROR in monitorul serial.

<

#include <SoftwareSerial.h>

SoftwareSerial ESPserial(2, 3); // RX | TX

void setup()

{

Serial.begin(115200); // communication with the host computer

//while (!Serial) { ; }

// Start the software serial for communication with the ESP8266

ESPserial.begin(115200);

Serial.println("");

Serial.println("Remember to to set Both NL & CR in the serial monitor.");

Serial.println("Ready");

Serial.println("");

}

void loop()

{

// listen for communication from the ESP8266 and then write it to the serial monitor

if ( ESPserial.available() ) { Serial.write( ESPserial.read() ); }

// listen for user input and send it to the ESP8266

if ( Serial.available() ) { ESPserial.write( Serial.read() ); }

}

>

Link spre comentariu

Cred ca incet-incet se face lumina. Codul pus mai sus e din Arduino, asa-i?

In cazul asta ESP8266 trebuie conectat la pinii 2 & 3 ai lui Arduino, nu la RX&TX (0 & 1). Pentru comunicatia cu ESP, in Arduino e implementat un port serial "emulat"/software:

SoftwareSerial espSerial = SoftwareSerial(2,3);  // RX | TX

 

Link spre comentariu

Am inteles ca functia aia imi configureaza pinii 2 si 3 ca RX  si TX, deci am conectat 2 la TXD si  si 3 la RXD. Dupa ce incarc programul in arduino si decshid monitorul serial primesc ">B⸮⸮⸮" la banda de 9600, iar dupa ce introduc AT, nu primesc nimic.

Link spre comentariu

E normal, ai viteza de comunicatie diferita intre Arduino (115200) si PC (aparent 9600):

Serial.begin(115200); // communication with the host computer

 

Link spre comentariu

Am incercat si cu urmatoarea secventa, imi apare pe monitorul serial wifi started, dar cand incerc sa tastez AT primesc ⸮⸮k⸮, la banda de 9600..

<

#include <SoftwareSerial.h>
SoftwareSerial wifi(2,3);
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Wifi started");
wifi.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:
 if(Serial.available()>0){
  byte b=Serial.read();
  wifi.write(b);
 }
 if(wifi.available()>0){
  byte b=wifi.read();
  Serial.write(b);
 }
}>

Link spre comentariu

Incearca sa trimiti tot mesajul dintr-o bucata:

 

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()>0) //PC trimite date
  {
    while(Serial.available()) //cat timp mai sunt caractere in buffer
    {
      wifi.write(Serial.read()); //citeste fiecare caracter si trimite-l 
    }
  }
  if(wifi.available()>0) // date wifi
  {
    while(wifi.available()) // cat timp mai sunt date in buffer
    {
      Serial.write(wifi.read()); //citeste-le
    }
  }
}

Desi cred ca nu e nevoie, abia dupa ce am scris codul de mai sus am vazut c-ai schimbat si viteza de comunicatie pentru portul de comunicatie cu ESP-ul. Fa-o la loc 115200, ca asa e predefinita in esp.

Adica

Serial.begin(9600);
...
wifi.begin(115200);

LE Cu formatarea codului /tagurile <> dintr-un post anterior ma refeream la butonul <> din bara de postat.Ala intre " si :)

 

Link spre comentariu

Am lasat 9600 la wifi begin si 115200 la wifi begin, iar la serial monitor 9600. Insinye csnt tastam comanda AT primeam ERROR, dar acum nu mai primesc nimic, teoretic ar trebui sa primesc OK...

Link spre comentariu

Pune codul, ca nu mai inteleg nimic.

Sau si mai simplu, trimite comenzile AT spre esp codificate hard, in cod (String com="AT si ce mai vrei tu", wifi.write(com)) si trimite la PC numai raspunsul. Asa reduci numarul de "necunoscute".

Link spre comentariu

In continuare primesc ERROR, ceea ce e interesant e ca imi arata pe monitorul serial cand modulul se conecteaza la hotspot.

 

gj.PNG

gj.PNG

Editat de Lilith
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări