Ir ao conteúdo
  • Cadastre-se

ESP8266 - A Pequena Maravilha para Comunicação WIFI


aphawk

Posts recomendados

@Papibakigrafo

 

Não tem nada a ver com o sistema do Renato, mas o código abaixo, faz o seguinte:

  1. pega o valor de uma String
  2. converte para int
  3. grava na eeprom no endereço 100
  4. faz a leitura da eeprom no endereço 100
  5. incrementa a variavel int
  6. converte a variavel int para String
  7. GOTO 2 (kkk)
#include <Wire.h>
#include <ESP8266WebServer.h>

#define EEPROM_END 0x50  //endereço da eeprom i2C

void i2c_eeprom_escrita(unsigned int end_memoria, byte valor)
{
 Wire.beginTransmission(EEPROM_END);
 Wire.write((int)(end_memoria >> 8));   // MSB
 Wire.write((int)(end_memoria & 0xFF)); // LSB
 Wire.write(valor);
 Wire.endTransmission();
 delay(10);
}

byte i2c_eeprom_leitura(unsigned int end_memoria)
{
 byte rdata = 0xFF;
 
 Wire.beginTransmission(EEPROM_END);
 Wire.write((int)(end_memoria >> 8));   // MSB
 Wire.write((int)(end_memoria & 0xFF)); // LSB
 Wire.endTransmission();
 
 Wire.requestFrom(EEPROM_END,1);
 
 if (Wire.available()) rdata = Wire.read();
 return rdata; 
}


String utc="-10";
int8_t utc_int;

void setup() {
  Serial.begin(115200);
  Wire.begin();

  //converte a string para int
  utc_int=utc.toInt();

  //grava na eeprom
  i2c_eeprom_escrita(100, utc_int);
  
}


void loop() {
 
  Serial.print("Gravado: ");//mostra o valor a ser gravado na eeprom
  Serial.println(utc_int);
    
  i2c_eeprom_escrita(100, utc_int);//grava na eeprom

  int8_t utc_read = (int8_t)i2c_eeprom_leitura(100);//le na o valor gravado na eeprom
  Serial.print("Lido: ");
  Serial.println(utc_read);
  Serial.println("");

  utc_int++;//incrementa o valor inteiro
  utc=String(utc_int);//converte o valor inteiro para String atraves de um CAST
  
  delay(5000);

}

 

Agora basta você analisar os princípios e aplicar no sistema do Renato.

 

Veja a tela do monitor:

 

monitor.png

 

 

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

  • Membro VIP
12 horas atrás, aphawk disse:

Quando der um pico de mais de 200mA na transmissão do ESP, o diodo de germânio abre o bico na hora !

 

Eu não sabia do diodo de germânio, mas já estou vendo que ele tem uma queda de tensão que é até menor do que a do diodo de silício. Isso me confunde mais ainda, pois eu já desconfiava e tinha receio da aplicação do segundo para tal "gambiarra". Penso que há algum detalhe que a invalida. Ainda não sei qual é.

adicionado 6 minutos depois
12 horas atrás, aphawk disse:

Se preferir gastar um pouco menos mas também ter mais trabalho para dissipar o calor , pode ser o Ams1117 3.3 :

 

Eu nunca vi ou não sei como distinguir como se dissipa calor com esses AMS1117, que não são PTH.

 

Criei um tópico para este assunto da alimentação do ESP-01. Respondam onde preferirem.

 

Link para o comentário
Compartilhar em outros sites

@ViniciusKruz , eu preciso novamente da sua ajuda.

 

 

O post do renato aloi ele ensina como guardar na struct pelo site /config.. Só que eu queria guardar apenas um dado na struct, o resto "wifi,senha",ipfixo" queria deixar tudo upado pelo codigo.

Sempre que eu tento adaptar o código dele dá erro, voce tem alguma ideia de como fazer?

adicionado 1 minuto depois

Em tempo, um cara em outro tópico deu a mesma dica que eu dei pro alexandre, só que em outras palavras


Eu pegaria um carregador de celular 5V e colocaria 3 diodos 1N4007 em série, assim sem obtêm algo próximo de 3,3V pra menos, não tem perigo nenhum em ligar seu módulo nisso.
Se quer aprender a usar reguladores de tensão compre ou encontre alguns como o 7805 ou 7812 e ligue nessas fontes de 12 e 16V que você tem aí e comece alimentando coisas simples, será o mesmo aprendizado que encontrar um regulador de 3,3V que é dificílimo de se achar.
 
Em tempo: Como a corrente desses módulos é baixa você pode montar um regulador transistorizado, em sua maioria são feitos por componentes simples, fáceis de achar e tem muito material na net e no fórum sobre isso, se achar interessante dê uma pesquisada.

viva a gambiarra:)

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

1 hora atrás, alexandre.mbm disse:

Eu nunca vi ou não sei como distinguir como se dissipa calor com esses AMS1117, que não são PTH.

 

 

Olha, esses reguladores que eu citei precisam ser soldados por aquela aba metálica atrás deles em uma superfície metálica para poderem dissipar.

 

Normalmente eu uso um pedaço de plaquinha PCB, deixo um retângulo pouco maior do que a largura do CI ( 4 mm de cada lado ) e com uns 3 centímetros de comprimento, e soldo a aba metálica do CI bem na borda.

 

Claro que quando você projetar a sua PCB desse projeto já pode deixar essa área de dissipação, nas duas façes da placa.

 

Paulo

 

 

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

@alexandre.mbm ,

 

Esses reguladores não são feitos para dissipar muita potência. O ideal é você alimentar com fontes de 5 Volts, assim a dissipação será bem baixa. Aliás, o uso ideal deles é para isso.

 

Se você for alimentar com fonte de 12V, o regulador vai ter de suportar 12-3.3 = 8,7 volts, e com uma corrente de cerca de 250 mA vai dissipar mais de 2 Watts, aí não vai dar certo.

 

O que você pode fazer também é o famoso regulador com um zener e um transistor :

 

4CXSg.gif

 

Basta um zener de 3,9 Volts, tipo um 1N4730A ou qualquer outro com essa tensão, não importa a potência do zener ;  um capacitor de 10 uF/16 Volts, um transistor BD135-16 OU BD139-16 com aquele famoso dissipador padrão para eles, e um resistor cujo cálculo é o seguinte :

 

R = (VIN - 3,9) / 0,01      Por exemplo se VIN =12 então R = 810 ohms . Use resistor de 1/4 de watt para garantir, mas de 1/8W já atende até uma tensão de entrada de 12 volts.

 

Quem sabe você encontra isso nas lojas aí perto de onde você mora !

 

Paulo

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

  • Membro VIP
16 horas atrás, lucianolcoa disse:

@alexandre.mbm Só consigo ver uma saída pra voce num projeto de imediato, taca diodo sem dó no bixim, um diodo de germanio da uma queda de tensão de aproximadamente 0.7 volts... vai enfiando diodo atrás de diodo até a tensão lhe ficar agradável...Essa como gambiarra seria uma ultima opção. Outra e voce procurar um desses em sucata. Mas de cabeça não sei o que iria um regulador 7833

 

Parece que a queda de tensão do diodo de germânio, que pode não ser fácil encontrar, é de apenas 0.3 V. Pra mim isso o faz menos indicado do que o diodo de silício.

 

Referências (que ainda preciso estudar):

  1. Saiba Quando usar um Diodo de Silício ou Germânio
  2. Diodos - (quase) tudo que você precisa saber sobre
2 horas atrás, lucianolcoa disse:

Em tempo, um cara em outro tópico deu a mesma dica que eu dei pro alexandre, só que em outras palavras

viva a gambiarra:)

 

A citação acima foi editada por mim. Substitui uma citação interna a ela por link para o próprio tópico.

 

Aquele é um tópico que eu designei para desafogar este aqui. Perceba que a "regulação de tensão" não faz parte da "Programação de microcontroladores", mas da "Eletrônica".

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

@alexandre.mbm ,

 

Vou colocar aqui porque também é de interesse de todos. Mesmo aqui sendo dedicado à programação do ESP, resolver a fonte de alimentação para ele é igualmente importante.

 

Vejam este link no Ebay :

 

http://www.ebay.com/itm/HLK-PM03-AC-DC-220V-to-3-3V-Step-Down-Buck-Power-Supply-Module-Converter-/322358456622?hash=item4b0e0fb12e:g:VQAAAOSwJ7RYT~VQ

 

É uma fonte chateada automática, de 90 a 260 Volts de entrada, e pode fornecer 3,3 Volts com até 1000 mA de corrente na saída !

 

E o vendedor é bom, compro dele fazem vários anos.

 

Por cerca de R$ 9,00 já com frete, acho imperdível ! 

 

Acabei de comprar 3 delas, uma hora chega ....

 

Paulo

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

@aphawk vou comprar semana que vem também, mas daqui:

 

https://pt.aliexpress.com/item/Free-Shippingn-HLK-PM01-AC-DC-220V-to-5V-mini-power-supply-module-intelligent-household-switch/32258088214.html

 

Alias, o cara do Ebay também envia da China, então dá no mesmo kkkkk

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

@Papibakigrafo Sim ja tentei fazer isso. passei umas 3 horas quebrando a cabeça... O ip, login,password queria deixar pra compilar no propio codigo mesmo, apenas um dado que queria gravar na eeprom para ser aproveitado. Aquela struct do renato aloi e meio esquisita, ela soma, mas subtrai ela não subtrai.....

 

Acho que talvez tenha indentificado o problema, como "punhetei bastante" a eeprom ela deve ta cheia, e regravar deve ta gerando coflito, talvez limpando a eeprom resolva, mas não sei como se faz isso kkkkkkkkkk

Link para o comentário
Compartilhar em outros sites

5 horas atrás, aphawk disse:

O que você pode fazer também é o famoso regulador com um zener e um transistor

Eu nunca consegui estabilidade com esses reguladores com transistor e zener, se a tensão na entrada sobe, a tendência é da saída subir também. Vai ver foi por inexperiência minha.

adicionado 11 minutos depois

@lucianolcoa @Papibakigrafo  

 

Pra apagar a eeprom, pode fazer manualmente a função:

for (int i = 0 ; i < EEPROM.length() ; i++) {
    EEPROM.write(i, 0);
  }

Ou então tem um comando que não me lembro agora de cabeça(caso esteja usando a EEPROM simulada na Flash) que é 

 

eeprom.clear() ou eeprom.erase() ou ainda eeprom.format(), dá uma pesquisada aí porque realmente não me lembro corretamente.

adicionado 17 minutos depois
7 horas atrás, lucianolcoa disse:

O post do renato aloi ele ensina como guardar na struct pelo site /config.. Só que eu queria guardar apenas um dado na struct, o resto "wifi,senha",ipfixo" queria deixar tudo upado pelo codigo.

Sempre que eu tento adaptar o código dele dá erro, voce tem alguma ideia de como fazer?

 

Para fazer alterações nesse código do Renato eu realmente to fora porque vou ter que estudar e fazer funcionar esta estrutura e meu tempo ta muito curto esses dias, o que eu posso fazer é te explicar como fazer do jeito trivial onde eu indica-se o endereço da eeprom e manda gravar/ler, serve assim?

 

 

adicionado 26 minutos depois
1 hora atrás, lucianolcoa disse:

Acho que talvez tenha indentificado o problema, como "punhetei bastante" a eeprom ela deve ta cheia, e regravar deve ta gerando coflito

 

Ao gravar na eeprom, eu sempre tomo o cuidado de antes, apagar aquele determinado trecho, justamente pra não deixar lixo, porém isso não é obrigatório, se você está mandando gravar os dados até o endereço 5, logo o endereço 6 tem que ter um caractere nulo('\0'), daí toda vez que for ler este a eeprom tem que ir lento e testando se já pegou esse tal caractere, dessa forma não tem erro, eeprom cheia não impede gravação nem leitura, se isto está acontecendo, deve ter alguma coisa errada no seu código, aliás, esse código do Renato mais tem dado dor de cabeça pra vocês do que ajudado, tem vezes que precisamos avaliar se vale a pena a tal "facilidade" proposta. Eu testei esse código dele somente até perceber que só dá pra usar isso aí se realmente entender o que está fazendo porque pra mim ele não funcionou como deveria.

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

@ViniciusKruz ,

 

Bom, na verdade tudo depende do que você admite como possível variação da tensão de entrada.

 

Um circuito regulador do tipo que eu mostre tem de deixar passar corrente para o diodo Zener, de maneira que ele trabalhe sempre na parte mais linear do trecho de avalanche.

 

Alguns autores dizem que o melhor é fazer o Zener trabalhar sempre ente 25% e 36% de sua corrente máxima, que é a região com variação mais linear. Outros dizem que o ideal é usar a corrente de teste indicada no datasheet.

 

Mas tem de lembrar que o ganho do transistor também é fundamental nisso.

 

Por exemplo, um circuito desse tipo, onde a tensão de entrada variasse muito, indo desde 10V até 15V , tem de ser projetado primeiro verificando a corrente máxima no zener quando a tensão for de 15V, e em seguida se com 15 Volts existe uma corrente mínima que possa manter o zener dentro da faixa linear.

 

Por experiência devida a leituras anteriores, sempre mantive a corrente mínima do zener em 10 mA . 

 

Então, vou calcular da maneira inversa :  com 10V tem de circular 10 mA no zener. Então, o resistor será de ( 10-3,9 ) / 0.01 = 610 Ohms.

 

Agora, vamos ver qual a corrente que vai circular com 15 Volts : (15-3.9) / 610 = 18,2 mA.

 

Sabendo que para esse zener a corrente de teste no datasheet é de 64 mA , e a que calculamos é de 18,2 mA, podemos usar um valor médio, algo como ( 64+18 )/2 = 41 mA como a corrente máxima.

 

Assim, eu usaria um resistor de ( 15 - 3.9 ) / 0.041 = 270 Ohms para garantir uma boa estabilidade da tensão de saída com a variação da tensão de entrada descrita.

 

A corrente mínima no caso seria de 22,5 mA . 

 

Agora, o ganho do transistor.

 

 

P.S. : ACHEI UM ERRO MEU, agora está corrigido abaixo !

 

Se você pretende tirar 1A desse circuito, tem de usar um transistor, mas para ter uma boa estabilidade em tensão, temos de manter pelo menos 10 mA em cima do Zener, então temos apenas  12,5 mA  que pode circular pela base do transistor ....  precisamos de um com ganho mínimo de 1 / 0.0125 = 80.

 

Mas agora tem outra dica : o capacitor colocado na base vai aparecer na saída multiplicado pelo ganho do transistor !

 

Então, usarei sempre um com um bom ganho, e eu sempre gostei de usar a tal família -16 dos BDxxx para isso, pois eles possuem um alto ganho.

 

Por isso que recomendei os BD135-16 e BD139-16, eles permitem uma excelente variação de corrente na saída, aliados ao efeito estabilizador muito grande do capacitor.

 

Esses transistores tem um ganho acima de 150 , então um capacitor de 47uF na base aparece na saída como sendo de 47 X 150 = 7.050 uF !!!

 

Bom, espero que não esteja ensinando como comer bananas ao macaco kkkkk !

 

Paulo

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

@aphawk  Putz que aula heim meu amigo!!! Eu sempre fui devagar nas equações de física e consequentemente nas de eletrônica, geralmente eu uso os reguladores prontos por já ter apanhado demais dos sistemas com transistores, imagino que se eu precisar de uma carga maior que os reguladores prontos podem fornecer, aí sim eu partiria para os transistores, mas com um regulador pronto controlando a estabilidade da base kkkk, só pra evitar a fadiga.

adicionado 1 minuto depois
56 minutos atrás, aphawk disse:

Esses transistores tem um ganho acima de 150 , então um capacitor de 47uF na base aparece na saída como sendo de 47 X 150 = 7.050 uF !!!

 

Eu ainda não havia pensado nisso, faz sentido!!!

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

Só pra deixar registrado, a melhor forma que encontrei até agora para enviar os dados para o servidor foi:

 

HTTPClient http;
      http.begin("http://www.site.com.br/iot.php");
      http.addHeader("Content-Type", "application/json");
      String postMessage = String("{'user' : '"+userIot+"', 'pass' : '"+senhaIot+"', 'cont' : '"+enviaTst+"'}");
      int httpCode = http.POST(postMessage);
      Serial.print("http result:");
      Serial.println(httpCode);
      http.writeToStream(&Serial);
      http.end();

 

Biblioteca: ESP8266HTTPClient.h

Método de envio: POST

Método de resposta: POST

 

O envio é rápido, a resposta vem de imediato e o ESP não fica travado esperando o retorno do site.

 

Não estou dizendo que esta seja a melhor forma, apenas a melhor que encontrei até agora.

 

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

@ViniciusKruz ,

 

A necessidade é a mãe da invenção, meu amigo !

 

Muitas vezes, em campo temos de resolver problemas com aquilo que está à mão.... e nessas horas temos de apelar  para a velha Eletrônica básica !

 

Esse circuito de regulador não tem proteção de curto, nem a regulação de um bom LMxxx, mas funciona muito bem !

 

Paulo

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

  • Membro VIP
7 horas atrás, lucianolcoa disse:

talvez limpando a eeprom resolva, mas não sei como se faz isso kkkkkkkkkk

 

Alguém já disse que basta gravar por cima. Mas será que essa EEPROM é toda sua? Da última vez que li sobre isso, poucos dias atrás, ficou parecendo que a biblioteca de acesso deixa-nos ver somente a área que é nossa mesmo. Não dou certeza.

 

6 horas atrás, ViniciusKruz disse:

Eu nunca consegui estabilidade com esses reguladores com transistor e zener, se a tensão na entrada sobe, a tendência é da saída subir também. Vai ver foi por inexperiência minha.

 

4 horas atrás, ViniciusKruz disse:

Eu sempre fui devagar nas equações de física

 

+1

 

Mas é importante conhecer as opções.

 

2 horas atrás, aphawk disse:

Esse circuito de regulador não tem proteção de curto, nem a regulação de um bom LMxxx, mas funciona muito bem !

 

A falta de proteções contra sobrecarga e aquecimento é o que me amedronta. Projetar algo mais seguro requer tempo, paciência, estudo, e ferramentas de aferição das quais não disponho. Provavelmente eu aplicarei reguladores prontos.

 

Pode não ser inteligente em termos de $$ e eficiência energética, mas chego a cogitar regular em cadeia: dois reguladores para o segundo ser de 3.3 V. Haverá alguma pegadinha? Talvez nos limites de corrente, além da quantidade de componentes, principalmente capacitores, não é?

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

@alexandre.mbm  Bem pra proteger contra curto basta voce colocar um diodo de retorno no transistor com a "ponta preta" virada para a entrada da tensão alternada. Pra proteger contra corrente voce coloca um fusivel na corrente que desejar. Agora de resto, ficarei devendo.

 

Tem gente que coloca diodo em paralelo com os capacitores eletroliticos. Isso evita problemas principalmente quando voce mexe com amplificadores de alta potencia, que acumulam cargas consideráveis (80,90 volts).

Link para o comentário
Compartilhar em outros sites

Pessoal, consegui "isolar o meu problema"

 

eu preciso de uma variavel char qualquer que armazena 50 carcteres

 

char token[50]="jlkhdsaujhsaoudhasuodhsao"; //exemplo

 

e consigo gravar elas na eeprom, na variavel de wifiConfig.token,só que na hora de ler eu preciso que ela volte a ser char e é ahe que ta bugando...

 

ALguem tem uma manha de converter a eeprom em char novamente para poder usar?Agradeço qualquer luz.

 

Pessoal a duvida é de html mas como faço pra importar uma classe no botao estilo <input type? tentei colocar class='btn' que foi a classe que fiz usando css mas não importou.

 

Essa ultima consegui, é so nomear input{ } no style....

 

---------------

Resolvi de um jeito meio porco, coloquei um push button que inviabiliza o ip para funcionar o "array" que eu queria que é um protocolo mqtt configurável, mas ainda assim to fazendo meu código pessoal de gravar as coisas na EEPROM, novamente Vinicius, Papiba e Alexandre, precisarei da ajuda de vocês manolos :)

  • Curtir 2
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...