Ir ao conteúdo
  • Cadastre-se

ESP8266 - A Pequena Maravilha para Comunicação WIFI


aphawk

Posts recomendados

Eu uso o Rad Studio Berlin (Delphi 10.1). Nele tem a possibilidade de fazer App pra Windows, Mac, Android e iOS. E a linguagem é pascal né, ou, pode se fazer em HTML + PHP e apenas colocar um WebBrowser no aplicativo e pronto! =)

 

Obs: esse último exemplo é o que eu faço! ^^

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

@alexandre.mbm  Já tentei fugir do Windows também, mas infelizmente não foi possível, no máximo tem que usar as duas plataformas. A libertação do Windows, na minha opinião, somente será possível daqui ha uns 10 anos ou mais, isso me baseando nessas novas tecnologias onde as IDEs podem programar para qualquer sistema. Outro fator favorável que vejo é que para poderem programar para diversas plataformas de uma só vez, as IDEs estão sendo obrigadas a usarem linguagens cada vez mais universais como por exemplo, linguagem para Web. A Microsoft já constatou isso, já sabem que vão perder absurdamente o mercado nos próximos anos, tanto é que a IDE deles(Visual Studio) já está liberada gratuitamente e programando para as três principais plataformas. Perceberam que não dá mais pra "amarrar" as pessoas.

adicionado 6 minutos depois

@Papibakigrafo  É muito pesado na hora de simular? Qual é seu hardware?

 

No Visual Studio com meu Hardware(Core2 Duo 4GbRam) é impossível. Agora instalei o Intel XDK sugerido pelo @alexandre.mbm , ainda não testei, mas me parece ser bem leve.

 

21 minutos atrás, Papibakigrafo disse:

pode se fazer em HTML + PHP

Muito interessante isto!!!

 

Link para o comentário
Compartilhar em outros sites

@ViniciusKruz Então, a versão Berlin (utilizada pro iOS 10.1 e Android até 7.0), é um pouco pesado sim. Meu PC é esse da minha assinatura. Para abrir a primeira vez demora cerca de 30 segundos.

- A simulação no android com o SIMULADOR também é demorada, mas é em todos os PC's é assim... mais de 3 minutos para abrir a primeira vez. Se tiver um celular com android, é rápido e fácil! Se não me engano, apenas pra iOS que tem que ter o Rad Studio atualizado. Para android, qualquer Rad Studio acredito que funcione. Tente o 7, ele é mais leve! ^^

- Já a simulação para iOS, funciona apenas em um Mac, ou uma virtual Box com o Mac instalado, pela rede. E de coração, é um SACO fazer um app pra iOS e disponibilizá-lo na App Store.

 

O Delphi tem um WebBrowser, que você coloca o endereço da página que quer abrir! É muito simples. Fiz um sistema (nada a ver com o arduino kkk) com 1 amigo meu todo em PHP e HTML, e já disponibilizei até na Play Store.

 

Qualquer dúvida estou à disposição! =)

 

 

 

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

  • Membro VIP
37 minutos atrás, ViniciusKruz disse:

tanto é que a IDE deles(Visual Studio) já está liberada gratuitamente e programando para as três principais plataformas. Perceberam que não dá mais pra "amarrar" as pessoas.

 

Nada! No Linux só é possível fazer algo com o Core e com ASP.NET.

 

Se você está se referido ao Visual Studio Code, ele nada tem a ver — além do nome, claro! — com o famoso Visual Studio de sempre. Foi apenas uma jogada de marketing. É apenas um editor de código, tal como o Sublime ou o Atom.

 

37 minutos atrás, ViniciusKruz disse:

Agora instalei o Intel XDK sugerido pelo @alexandre.mbm , ainda não testei, mas me parece ser bem leve.

 

Dê uma olhada em vídeos do canal TekZoom.

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

@ViniciusKruz Realmente tem coisas que so o windows pra resolver. Essa semana instalei o protheus no linux e ele não simula direito(pra colocar o terra no chip e uma sofrencia), sem falar nos clocks que ficam defasados e tal. E olha que desde que o mundo e mundo existe o protheus, mas nunca fizeram uma versão linux pra ele.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@ViniciusKruz, isso é o Visual Studio Community? Eu disse que ele não tem versão para GNU/Linux.

 

Na verdade, não estou sabendo ao certo o que você está me mostrando. Que podemos, usando o Visual Studio Community em Windows, desenvolver para essas plataformas móveis?

Link para o comentário
Compartilhar em outros sites

3 horas atrás, alexandre.mbm disse:

Eu disse que ele não tem versão para GNU/Linux.

 

Com certeza não tem porque ele é de propriedade da Microsoft.

 

3 horas atrás, alexandre.mbm disse:

Que podemos, usando o Visual Studio Community em Windows, desenvolver para essas plataformas móveis?

 

Exatamente.

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

@lucianolcoa  Ainda não precisei mandar email, mas penso que se você conseguir configurar o ESP como webcliente, ou seja, ele vai acessar outros sites, não deve ser bicho de sete cabeças não, até porque, deve ter muita biblioteca por aí, assim que eu tiver um tempo aqui vou ver se pego um exemplo simples pra testar e te falo.

Link para o comentário
Compartilhar em outros sites

O bom de voce tentar resolver algo mais difícil. e que o que antes era difícil se torna fácil. Finalmente consegui apagar o maldito led por botao fisico e webserver... No final das contas era até bem simples... Estava colocando a logica do pushbutton dentro do web client...Quando eu deveria colocar fora.... Percebi isso mexendo com o arduino pra não perder o hábito e nossa :) O arduino c

hega a ser gostoso as panes em relação ao ESP, bem mais dificultoso pra consertar... Mas enfim, como muitos me ajudaram aqui disponibilizo o código para o caso de alguem querer fazer o mesmo:

#include <ESP8266WiFi.h>
 
const char* ssid = "seu login";
const char* password = "sua senha";
 
int ledPin = D1; // GPIO13
int teste=D2;
int button=D0;
boolean status=LOW;

String vetor1;
String vetor2;

WiFiServer server(80);
 
void setup() {
  
  Serial.begin(115200);
  delay(10);

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  pinMode(teste,OUTPUT);
  digitalWrite(teste,LOW);
 pinMode(button,INPUT);
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
 
  // Start the server
  server.begin();
  Serial.println("Server started");
 
  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
 
}
 
void loop() {
   if(digitalRead(button)==LOW){
            delay(300);
            status=!status;
          }
          if(status==HIGH){
            digitalWrite(ledPin,HIGH);
            vetor1="apagado";
          }
          if(status==LOW){
            digitalWrite(ledPin,LOW);
            vetor1="aceso";
          }
   
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Wait until the client sends some data
  Serial.println("new client");
  //while(!client.available()){
    //delay(1);
 // }
 
  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  // Match the request
 
  if (request.indexOf("/quarto=ON") != -1)  {
    
    status=HIGH;
  }
  if (request.indexOf("/quarto=OFF") != -1)  {
    
  status=LOW;
  }
  if (request.indexOf("/corredor=ON") != -1)  {
    digitalWrite(teste, HIGH);
 vetor2="aceso";
  }
  if (request.indexOf("/corredor=OFF") != -1)  {
    digitalWrite(teste, LOW);
   vetor2="apagado";
  }
  
 
// Set ledPin according to the request
//digitalWrite(ledPin, value);
 
  // Return the response

  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("<center>");
  client.print("Eletronica e utilidades:Automacao residencial ");
 
  
  client.println("<br><br>");
  client.println("<a href=\"/quarto=ON\"\"><button>Ligar quarto  </button></a>");
  client.println("<a href=\"/quarto=OFF\"\"><button>Desligar quarto </button></a><br />");
  client.println("<a href=\"/corredor=ON\"\"><button>Ligar corredor </button></a>");
  client.println("<a href=\"/corredor=OFF\"\"><button>Desligar corredor </button></a><br />");    
 client.println(vetor1);
 client.println("<br><br>");
 client.println(vetor2);
 client.println("<br><br>");
 
  
  client.println("</html>");
 
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
 
}

Agora, consegui mandar email pelo ethernet shield usando o smtp do bol mas pelo esp não... X_X o troço ruim que só a *****, mas continuarei tentando....

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

Pessoal andei dando uma pesquisada sobre o lance de enviar emails de alerta e fiz uns testes mais expansivos com o arduino. A grande verdade é que ele trava as vezes, o que torna a aplicação não 100% confiável... Num grupo de watts de programadores ao qual faço parte e eles me falaram de uma biblioteca no arduino. Ao qual pode ser implementada também no esp, que reseta o código após algum tempo caso ele entre numa espécie de bug... Mas é como eu falei, pode fumfar como pode não fumfar....

Uma outra solução seria usar servidores de smtp.. So que o reves é o limite diarios de emails para contas gratuitas...

Brincando com python desenvolvi um programa, este sim 100% seguro, que envia um email de alerta, podendo ser linkado ao arduino ou node.... 

Como precisao de um computador posso linka-lo ao raspberry e rodar o script em python se comunicando com node/arduino via serial. Com uma parcela de acerto beirando aos 100%... Tentarei melhorar o script para implementar foto também, meio que para "justificar" o uso do rasp. Pois creio eu que mandar foto por email seria algo que fugisse da capacidade de um node comum... Mas do esp32 quem sabe....

Como aqui não é forum de python fico com receio de postar o código aqui e descumprir as regras...

Link para o comentário
Compartilhar em outros sites

@Intrudera6

 

Peguei a parte do seu código que encontra o dia da semana e ele estava encontrando um dia antes, daí eu mudei para ele pegar o resto da divisão por 8 e resolveu, testei com muitas datas diferentes até 2030 e as datas bateram todas, veja como ficou:

// dia da semana (0 para domingo), 04/01/1970 é domingo
unsigned int diasemana(unsigned int ent_dia, unsigned int ent_mes, unsigned long ent_ano) {
  unsigned int saida = (DiasEntreDatas(ent_dia, ent_mes, ent_ano, 4, 1, 1970) ) % 8;
  if (saida < 0) {
    saida = saida + 7;
  }
  return saida;
}

 

nesta parte:

...1970) ) % 7;

 eu mudei para:
...1970) ) % 8;

 

Me parece que funcionou, verifica aí e depois me fala se concorda. 

 

Eu mudei todas as variáveis tipo unsigned char para unsigned int e unsigned long(para o ano), não sei se foi por causa disso que houve mudança no resultado, mas creio que não.

 

 

 

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

Vou conferir.

 

Eu sou meio pão duro com as variáveis, tendo sempre a usar as menores possíveis para economizar memória.

 

Me passe os valores que você testou pois realmente é meio sem sentido eu testar uma variável para número negativo se ela é unsigned (bug bobo), mas nos cálculos internos pode estar havendo algum estouro de variável, o que não faz realmente sentido é obter o resto da divisão por 8, pois os dias da semana só são 7.

 

Eu ainda sou muito verde no C, posso estar fazendo coisas "perigosas" no código, algo que tem potencial para funcionar de forma adversa em algumas situações particulares.

 

Citação

// dia da semana (0 para domingo), 04/01/1970 é domingo

unsigned char diasemana(unsigned int ent_dia, unsigned int ent_mes, unsigned int ent_ano) {

signed int saida = (DiasEntreDatas(ent_dia, ent_mes, ent_ano, 4, 1, 1970) ) % 7;

if (saida < 0) {

*/ este teste não faz sentido se a variável é unsigned e mesmo assim só suporta até 89 anos antes (ano de 1881) usando int, os limites seria muito maiores usando long, mas não acho que faça sentido este desperdício de memória*/

saida = saida + 7;

}

return (unsigned char)saida; // por via das dúvidas

}

Não sei porque não estou com opção de código.

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

Realmente não faz o menor sentido a divisão por 8, a princípio pensei que fosse a contagem com ponto de partida em 0 ou 1, mas não entendi nada rsrs.

 

Tem alguma coisa estranha acontecendo, porque de repente mesmo com divisão em 8, passou a ficar errado novamente, com um dia atrás, daí voltei para divisão em 7 e normalizou, fiquemos de olho rsrsrs.

 

 

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

Passe as datas que você está testando, imagino que deve ter um estouro de alguma variável em algumas situações particulares, estes são os piores bugs para se identificar, mas com os valores eu gatilho a rotina toda para ver se os valores calculados fazem sentido. Já peguei muito bug deste jeito, mas eu prefiro um deguber, fica muito mais fácil, pena que ele não existe para o ESP8266 (pelo menos não para a gente).

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

Na IDE do Arduíno tem uma biblioteca para a função de repetidor(eu acho que seja), deve ser isto o que você está querendo, me parece que ela é para o ethernet shield, mas acredito que dê pra adatptá-la.

 

Veja a descrição dela:

 

/*
  Repeating Web client

 This sketch connects to a a web server and makes a request
 using a Wiznet Ethernet shield. You can use the Arduino Ethernet shield, or
 the Adafruit Ethernet shield, either one will work, as long as it's got
 a Wiznet Ethernet module on board.

 This example uses DNS, by assigning the Ethernet client with a MAC address,
 IP address, and DNS address.

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13

 created 19 Apr 2012
 by Tom Igoe
 modified 21 Jan 2014
 by Federico Vanzati

http://www.arduino.cc/en/Tutorial/WebClientRepeating
 This code is in the public domain.

 */

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

@Intrudera6

 

Voltou a marcar um dia atrás, na data de hoje está dando como segunda feira. Concordo com você, pode ser mesmo estouro de variável, vou mudar todas para long pra testar, aí não tem desculpa rsrs.

adicionado 11 minutos depois

Passei todas as variáveis para unsigned long mas ainda está como segunda feira.

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!