Ir ao conteúdo
  • Cadastre-se

ESP8266 - A Pequena Maravilha para Comunicação WIFI


aphawk

Posts recomendados

  • 4 semanas depois...
  • 2 semanas depois...

@Papibakigrafo você conseguiu salvar o SSID e senha na eeprom do esp?

 

Estive pensando, precisava de uma maneira de inserir o login, senha e IP do esp depois de ja ter carregado o codigo nele. Pra ele ficar configuravel em qualquer lugar, sem precisar do codigo e tal..

 

Estou pensando na possibilidade de fazer uma plaquinha com ldc e um arduino... conversar com o esp via serial e assim "inserir" esses valores dentro do esp que irá gravar na eeprom. ou sera que tem como fazer com um software qualquer que estabeleça um comunicação serial e usar o proprio conector micro usb do nodemcu??

 

O que me dizem??

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...
  • 3 meses depois...

Este tópico está bem parado (o Clube do Hardware está meio parado), mas eu quero ver se movimento isto aqui um pouco.

 

O que estou fazendo é estudando o ESP32, tenho alguns para brincar, mas estou evoluindo bem devagar, por falta de tempo para me dedicar. Mas o que eu andei encontrando no youtube foram algumas coisas bem interessantes, que no final estão reacendendo o meu interesse, como por exemplo, um pequeno tutorial para utilizar de forma controlada os dois núcleos no ESP32 -

 

(nunca tinha programado antes fazendo isso e estou achando interessante), o que o ESP32 tem mais interessante é ser dual-core, além do bluetooth. O autor é um suíço com um sotaque um pouco forte no inglês mas cuja dicção é ótima, já assisti muita coisa dele, ele faz muita coisa interessante no ESP32 e ESP8266.

 

E o que eu venho observando é que a informação sobre o ESP32 está ficando mais detalhada e as bibliotecas estão começando a ficar úteis e mais completas. Eu normalmente aprendo pelos exemplos, mas estou dando umas cabeçadas com as bibliotecas do BME280 (a Adafruit_BME280.h por exemplo) e toda vez que chego nesta linha do programa (status = bme.begin();) o ESP32 para a execução do programa (mas não trava pois as interrupções continuam rodando), o que será que pode estar acontecendo ?

 

Vai abaixo um programa simples em que estou testando e aprendendo como programar o ESP32, e onde aconteceu o problema com a biblioteca Adafruit_BME280.h .

 

/* ESP32 takes a large current pulse to get started, so won't work with a USB programmer PSU, need a direct power feed at 3.3V
   ESP32 in Deep Sleep takes 0.0056mA or 5.6uA, giving a typical battery life with a 2600mAh battery of : 220 days at 15-min update intervals
 Typical battery capacities:
   AAA 1200 (Alkaline) or  800–1000 (NiMH) 
   AA 2700 (alkaline) or 3000 (Lithium-Rechargeable) or 1700–2900 (NiMH) 
   C 8000 (alkaline) or 4500–6000 (NiMH) 
   D 12000 (alkaline) or 2200–12000 (NiMH) or 19000 (Lithium-Primary) 3.6V 
   9V Transistor 565 (alkaline) or 175–300 (NiMH)
   6V Lantern 26000 (alkaline) 
   CR2032 240 (Lithium-Primary) 3.6V 
   CR2016 90 (Lithium-Primary) 3.6V 
   4 Farad Cap 1 (loses 1 volt in 1 hour at 1mA)
   
*/
#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_BME280.h> 
// baixar lib <Adafruit_Sensor.h> de https://github.com/adafruit/Adafruit_Sensor
// para que a lib <Adafruit_BME280.h> funcione

#ifdef __cplusplus
extern "C" {
#endif

uint8_t temprature_sens_read(); // define sensor de temperatura interno do ESP32
//uint8_t g_phyFuns;

#ifdef __cplusplus
}
#endif

#define ADC_input_pin 36 // also known as SVP ADC-0 or SVN Pin-39 
#define Led_Azul 2 // Pino GPIO-02 ligado ao led azul da placa
#define pressure_offset 1.95 // Compensates for this location being 20M asl  


WiFiClient client; // wifi client object


uint8_t temp_farenheit;
float temp_celsius;

uint32_t freeheap;
uint32_t flashChipSize = ESP.getFlashChipSize();
uint32_t flashChipSpeed = ESP.getFlashChipSpeed();

uint32_t hora_ant;

float VBat;
boolean Status_LED = HIGH;

hw_timer_t * timer0 = NULL; // cria timer0
portMUX_TYPE timerMux0 = portMUX_INITIALIZER_UNLOCKED; // para multiplos timers
//boolean flag_timer0 = false;

void Pisca() {
  portENTER_CRITICAL_ISR(&timerMux0); // para multiplos timers
  
  //Status_LED = 1 - Status_LED; // comuta Led_Azul
  Status_LED = !Status_LED; // comuta Led_Azul
  digitalWrite(Led_Azul, Status_LED);
  
  portEXIT_CRITICAL_ISR(&timerMux0); // para multiplos timers
}


const char *ssid     = "MEU_WIFI";
const char *password = "Minha Senha";

char ThingSpeakAddress[] = "api.thingspeak.com";      // Thingspeak address
String api_key           = "***********";  // Thingspeak API WRITE Key for your channel

//const int UpdateInterval = 10 * 60 * 1000000;  // e.g. 10 * 60 * 1000000; for a 10-Min update interval (10-mins x 60-secs * 1000000uS)
const int UpdateInterval = 30 * 1000000;  // e.g. 30 * 1000000; para 30 segundos de intervalo de atualização (30-secs * 1000000uS)

Adafruit_BME280 bme;

void setup() {
  Serial.begin(230400);
  
  pinMode(Led_Azul, OUTPUT);      // configura o pino do Led_Azul como saída
  timer0 = timerBegin(0, 80, true); // Timer0, frequência dividido por 80
  timerAttachInterrupt(timer0, &Pisca, true);
  timerAlarmWrite(timer0, 49999, true);// microssegundos (50000 - 1)
  timerAlarmEnable(timer0);
  
  
  // Set WiFi to station mode and disconnect from an AP if it was previously connected
  //WiFi.mode(WIFI_STA);
    //WiFi.disconnect();
  //delay(100);
    
  WiFi.begin(ssid, password);
  Serial.println();
  Serial.println("Start WiFi");
  while (WiFi.status() != WL_CONNECTED ) {Serial.print("."); delay(500); }
  
  timerAlarmDisable(timer0);
  timerAlarmWrite(timer0, 499999, true);// microssegundos (500000 - 1)
  timerAlarmEnable(timer0);
  
  Serial.println();
  Serial.println("Conectado a " + String(ssid));
  
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  
  
  Wire.begin(17,16); // (sda,scl) 
  Serial.println("Wire.begin(17,16);");
  
  bool status;
    
  // default settings
  status = bme.begin();
  Serial.println("status = bme.begin();");
  
  if (!status) {
  //if (!bme.begin(BME280_ADDRESS)) {
    Serial.println("Could not find a sensor, check wiring!");
  } 
  else {
    Serial.println("Found a sensor continuing");
    while (isnan(bme.readPressure())) {};//Serial.println(bme.readPressure());}
  }

  float temperature = bme.readTemperature(); // 3 example variables, ideally supplied by a sensor, see my examples for the BMP180, BME280 or DS18B20
  float humidity    = bme.readHumidity();
  float pressure    = bme.readPressure() / 100.0F + pressure_offset; // Result is in hPA
  float VBat        = float(analogRead(ADC_input_pin)) / 4096.0f * 3.3 * 2;    // (dividido por 2 ) Usando ADC0
  
  temp_farenheit = temprature_sens_read();
  temp_celsius = ( temp_farenheit - 32 ) / 1.8;
  
  Serial.print("Memória Livre = "); Serial.print(freeheap);
  Serial.print(" ESP32 - Tamanho da memória flash = " + String(flashChipSize) + " bytes");
  Serial.println(" ESP32 - Velocidade da memória flash = " + String(flashChipSpeed) + " Hz");
  Serial.println(" Bateria/USB = " + String(VBat) + "V  Temperatura ESP32 = " + String(temp_celsius) + "°C");
  Serial.println("Temperatura = " + String(temperature) + "°C umidade = " + String(humidity) + "% Pressão = " + String(pressure) + "hPa Tensão " + String(VBat) + "V Temperatura ESP12 =" + String(temp_celsius) + "°C");
  
  
  UpdateThingSpeak("field1=" + String(temperature) + "&field2=" + String(humidity) + "&field3=" + String(pressure) + "&field4=" + String(VBat) + "&field5=" + String(temp_celsius)); //Send the data as text
  
  
  esp_deep_sleep_enable_timer_wakeup(UpdateInterval);
  BME280_Sleep();
  Serial.println("Going to sleep now...");
  esp_deep_sleep_start();
}

void loop() {
  //Do nothing as it will never get here!
}

void UpdateThingSpeak(String DataForUpload) {
  WiFiClient client;
  if (!client.connect(ThingSpeakAddress, 80)) {
     Serial.println("connection failed");
     return;
  }
  else
  {
    Serial.println(DataForUpload);
    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: " + api_key + "\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(DataForUpload.length());
    client.print("\n\n");
    client.print(DataForUpload);
  }
  client.stop();
}

void BME280_Sleep() {
  //Serial.println("BME280 to Sleep mode");
  Wire.beginTransmission(0x76); // Check your I2C address, they vary, could be 0x77
  Wire.write((uint8_t)BME280_REGISTER_CONTROL);
  Wire.write((uint8_t)0b00);
  Wire.endTransmission();
}

E alguém sabe porque a temporização das interrupções no ESP32 não são tão precisas como no ESP8266, normalmente eu perco quase um microssegundo no ESP32, no ESP é sempre exato, em mais de 6 casas decimais, parece que as interrupções no ESP32 funcionam diferente do ESP8266, alguém sabe o porque ? Na minha rotina de teste (e aprendizado) eu adianto em 1 uSeg na interrupção para tentar compensar este erro, mas o resultando não é perfeito (ainda tenho muito que aprender), o erro é desprezível, mas vai se acumulando sempre.

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

Bom dia pessoal,

 

Encontrei no site da ANATEL o número de homologação do ESP-12F, um dos módulos que carregam o ESP8266. Os documentos da homologação podem ser achados aqui.

 

Quem realizou a homologação foi uma das fabricantes, a Shenzen Anxinke Technology Co., Ltd.. O endereço eletrônico deles pode ser acessado aqui: ai-thinker (o site é da china, mas creio que haja uma versão em inglês)

 

A pergunta: como eu posso usar esse número de homologação? Posso comprar qualquer módulo e colar a etiqueta da ANATEL por cima? Ou só terei sucesso se entrar diretamente em contato com o fabricante?

 

Infelizmente, não encontrei nenhuma loja que vendesse esse ESP-12F com certificação ANATEL (um exemplo é a Raspberry Pi certificada que a Felipeflop vende).

 

 

Link para o comentário
Compartilhar em outros sites

@lucianolcoa , esses terminais também são GPIOs, você só precisa descobrir qual é o número do GPIO (google responde fácil), desativar a porta serial do ESP em código (google responde fácil também) e configurar os GPIOs como entrada ou saída. Pra te deixar um pouco a frente das coisas, olhe este link com calma. Está em inglês, mas não é sempre mais fácil achar as coisas em inglês? Tradutor nele se for o caso.

 

http://www.instructables.com/id/How-to-use-the-ESP8266-01-pins/

Link para o comentário
Compartilhar em outros sites

Em 24/11/2017 às 09:10, passoswell disse:

@lucianolcoa , esses terminais também são GPIOs, você só precisa descobrir qual é o número do GPIO (google responde fácil), desativar a porta serial do ESP em código (google responde fácil também) e configurar os GPIOs como entrada ou saída. Pra te deixar um pouco a frente das coisas, olhe este link com calma. Está em inglês, mas não é sempre mais fácil achar as coisas em inglês? Tradutor nele se for o caso.

 

http://www.instructables.com/id/How-to-use-the-ESP8266-01-pins/

Puxa nem lembrava mais disso ahsuashuas... Tava querendo fazer push buttons no void setup com o esp8266 mas desisti por que por algum motivo esquisito ele não "excita" os botões mesmo declarando no setup. Não é que nem o nodemcu. E eu precisava disso pra criar uma configuração de bot. Mas acabei "contornando" este problema.

Link para o comentário
Compartilhar em outros sites

  • 3 meses depois...

@Silva Magalhaes Eras que não venho aqui. Nem lembrava mais desse código. No meu blog pessoal (que não mexo mais também) fiz um carrinho controlado por acess point. lá tem o código mastigado, com login e senha. Mas tem que fuçar no "void setup()"

http://eletronicaeutilidades.blogspot.com.br/2017/04/robo-controlado-por-wi-fi-usando-o.html

Link para o comentário
Compartilhar em outros sites

  • 3 meses depois...
Em 04/07/2017 às 14:52, rodrigocirilo disse:

@Papibakigrafo você conseguiu salvar o SSID e senha na eeprom do esp?

 

Estive pensando, precisava de uma maneira de inserir o login, senha e IP do esp depois de ja ter carregado o codigo nele. Pra ele ficar configuravel em qualquer lugar, sem precisar do codigo e tal..

 

Estou pensando na possibilidade de fazer uma plaquinha com ldc e um arduino... conversar com o esp via serial e assim "inserir" esses valores dentro do esp que irá gravar na eeprom. ou sera que tem como fazer com um software qualquer que estabeleça um comunicação serial e usar o proprio conector micro usb do nodemcu??

 

O que me dizem??

Bom, acabei conseguindo fazer isso.

Coloquei uma rotina parra receber strings via serial, baixei um app no celular de comunicação serial, setei o mesmo BR, espetei no celular com um adaptador OTG e iniciei a comunicação serial entre o nodemcu e o celular, funcionou perfeitamente.

adicionado 0 minutos depois

vocês tem usado seus ESP8266 a 80 ou 160Mhz ??? qual a confiabilidade de rodar a 160??

Link para o comentário
Compartilhar em outros sites

  • 9 meses depois...
Em 06/06/2018 às 10:00, rodrigocirilo disse:

Bom, acabei conseguindo fazer isso.

Coloquei uma rotina parra receber strings via serial, baixei um app no celular de comunicação serial, setei o mesmo BR, espetei no celular com um adaptador OTG e iniciei a comunicação serial entre o nodemcu e o celular, funcionou perfeitamente.

adicionado 0 minutos depois

vocês tem usado seus ESP8266 a 80 ou 160Mhz ??? qual a confiabilidade de rodar a 160??

Hoje em dia vale MUITO mais a pena utilizar o ESP32, tanto pelo preço parecido, quanto pela robustez e confiabilidade indiscutivelmente maior e melhor. O suporte do ESP32 é muito melhor e bem documentada, enquanto o ESP66 virou um "brinquedo".. Se precisar de algo confiável para produtos industriais/etc, não pense duas vezes entre ESP66 ou 32, vá de 32.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...
  • Moderador

Caros usuários,

 

De forma a melhorar a organização do nosso fórum, dar uma maior agilidade nos resultados de pesquisas e facilitar a participação em nossas discussões, julgamos ser necessário fechar este tópico, dado o seu alto número de respostas.

 

Aqueles que desejam debater sobre assunto semelhante, pedimos que abra um novo tópico no setor correspondente.

 

Contamos com a colaboração de todos e agradecemos por participarem do Clube do Hardware. 

 

Gratos pela compreensão,

Equipe Clube do Hardware

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...