muitos outros grandes amigos.
Com o meu aprendizado sobre ESP8266 em crescimento, senti necessidade de alguns recursos:
Consegui obter dados do sensor SHT10;
Consegui salvar, e usar em HTML, ícones na memoria livre (3Mega) do ESP;
Com ajuda do CEI, consegui montar um "sistema" de controle de iluminação bem básico.
hoje consigo acender aqui em casa, 5 lampadas e ambientes diferentes estando em qq lugar
do muuuuunnnnnddddooo. KKKK
Consegui aprender umas outras coisinha também.
Sobre o acesso externo, como meu IP dado pela concessionaria é dinâmico,
pode mudar a qq momento,
Sei que existem outras maneira de resolver, tais como o uso de sites
DDNS(acho que é isto mesmo),
mas resolvi ao meu modo assim: (Meio maluco).
Usei um Raspberry rodando Raspbian e rodando uma aplicação nod-rede.
(Aqui no Ceará é Nó de Rede kkkk).
Este rasp fica de hora em hora consultando o meu IP em um site que informa o meu IP na WAN.
Daí se o IP for igual ao da hora anterior ele não faz nada, mas se mudar, o nod-rede me envia
um email com o novo IP.
Esta parte teve uma grande ajuda do CK e do CEI. Sem eles eu não tinha conseguido fazer.
Bom, vamos agora pra nova encrenca.
Mudar os dados de acesso de uma rede WIFI.
Resolvi fazer um projeto pra minha irmã, que mora em um sitio nas montanhas.
Lá a temperatura pode chegar a quase 0 oc.
O objetivo é instalar um ESP com um sensor SHT10 do lado de fora da casa, e acessar
pela rede para ver a temperatura externa e definir com que roupa sair, ou se as plantas
precisam de alguma proteção.
Mas ai começaram os problemas.
Ela é somente uma usuária.
Dai pensei. Vou montar uma solução que ao não conseguir logar na rede, entre
em AP mode e ela usa a receita de bolo que fornecerei pra ela.
Legal, encontrei algo prontinho nos exemplos da biblioteca WiFiManager.h.
Se não consegue logar na rede, entra em AP mode com um IP 192.168.4.1.
Sei que existem vários projetos de mudança de senha, mas achei este bem versátil.
Legal
Usei o exemplo: AutoConnect.ino
Dai no seu navegador acessa-se a rede que ele criou e acessa o IP 192.168.4.1
e aparece um menu, seleciona-se uma opção, e se for a primeira,
vão aparecerão todas redes disponíveis
Dai escolhe-se a sua e digita a senha e clica em save.
Legal.
O ESP reconfigura e automaticamente dá um novo boot com os novos valores.
Conseguindo logar, usa um IP dinâmico e roda o seu sketch.
Mas tem um problema. Qual o IP ele obteve?
Ai pensei
Vou modificar esta biblioteca pra salvar o IP também.
Nem precisou, tem um exemplo que permite digitar o IP, o Gateway e a Subnet.
Exemplo: AutoConnectWithStaticIP.ino
Funcionou, mas ao dar novo boot ele usa o IP dinâmico.
E ai estou apanhado? Aceito ajuda. Como salvar e reusar os valores digitados?
RV
…
Adicionado por mineirin RV ao 12:32 em 12 agosto 2017
ar fico muito grato.
A interface está em php.
Já consigo acionar as saída via LAN( rede local), o problema é que não consigo via WAN(externa).
Estou tentando por dois meios, são eles:
* Via Apache(ja tentei com easyphp e wampserver);
* Hospedando o site.
1.Pelo easyphp eu consigo ver a página php e acionar as saidas normal, pesquisei e ví que tenho que configurar o roteador pra redirecionar toda solicitação pra uma porta(estou usando a 8090)...No meu caso eu tenho modem e roteador, estou fazendo o redirecionamento tanto no modem quanto no roteador, está correto?
1.1Quando vou configurar o easy php tenho que colocar o no-ip ou ddns, mas pra testar estou colocando meu ip externo, é pra funcionar não é? Sempre que coloco outro ip no documento httpd.conf o apache para de funcionar.
2. A hospedagem grátis onde fiz o cadastro só é possível trocar dados pela porta 80( que tudo indica que a minha é bloqueada ), por isso acho que nao to conseguindo.
Vou "anexar" os códigos que estou usando, se puderem dá uma olhada e me ajudar.
sketch
#include <SPI.h>#include <Ethernet.h>//Configurações do Ethernet Shieldbyte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };byte ip[] = { 192,168,1, 177 }; // ip que o arduino assumirábyte gateway[] = { 192,168,1, 1 }; // ip do roteadorbyte subnet[] = { 255, 255, 255, 0 };// String que representa o estado dos dispositivoschar Luz[7] = "0000L#";Server server(8090); // Cria o servidor na porta 8081// String onde é guardada as msgs recebidaschar msg[7] = "0000L#";void setup() { Ethernet.begin(mac, ip, gateway, subnet); server.begin(); pinMode(A0,OUTPUT); pinMode(A1,OUTPUT); pinMode(A2,OUTPUT); pinMode(A3,OUTPUT); pinMode(A4,OUTPUT); pinMode(A5,OUTPUT);}void loop() { Client client = server.available(); // SE receber um caracter... if (client) { // guarda o caracter na string 'msg' msg[1]=msg[2]; msg[2]=msg[3]; msg[3]=msg[4]; msg[4]=msg[5]; msg[5]=msg[6]; msg[6] = client.read(); if (msg[6]=='#') { switch(msg[5]) { case 'R': // Se receber o comando 'R#' envia de volta o status dos // dispositivos. (Que é a string 'Luz') client.write(Luz); break; case 'P': // Caso P#, aciona o pino do portão pequeno por 1s. digitalWrite(A4,HIGH); delay(1000); digitalWrite(A4,LOW); break; case 'G': // Caso G#, aciona o pino do portão pequeno por 1s. digitalWrite(A5,HIGH); delay(1000); digitalWrite(A5,LOW); break; case 'L': // Caso L#, ele copia os 4 bytes anteriores p/ a // string 'Luz' e cada byte representa um // dispositivo, onde '1'=ON e '0'=OFF Luz[0]=msg[1]; Luz[1]=msg[2]; Luz[2]=msg[3]; Luz[3]=msg[4]; if (Luz[0]=='1') digitalWrite(A0,HIGH); else digitalWrite(A0,LOW); if (Luz[1]=='1') digitalWrite(A1,HIGH); else digitalWrite(A1,LOW); if (Luz[2]=='1') digitalWrite(A2,HIGH); else digitalWrite(A2,LOW); if (Luz[3]=='1') digitalWrite(A3,HIGH); else digitalWrite(A3,LOW); break; } } }}
fim da sketch
página php
<html><head></head><body> <?php$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);// Se conecta ao IP e Porta:socket_connect($sock,"192.168.1.177", 8090); // aqui eu coloco o ip que o arduino esta na rede nao é? Ja testei com os dois(local e externo) // Executa a ação correspondente ao botão apertado.if(isset($_POST['bits'])) { $msg = $_POST['bits']; if(isset($_POST['Fora' ])){ if($msg[0]=='1') { $msg[0]='0'; } else { $msg[0]='1'; }} if(isset($_POST['Quarto1'])){ if($msg[1]=='1') { $msg[1]='0'; } else { $msg[1]='1'; }} if(isset($_POST['Quarto2'])){ if($msg[2]=='1') { $msg[2]='0'; } else { $msg[2]='1'; }} if(isset($_POST['Sala' ])){ if($msg[3]=='1') { $msg[3]='0'; } else { $msg[3]='1'; }} if(isset($_POST['Pequeno'])){ $msg = 'P#'; } if(isset($_POST['Grande' ])){ $msg = 'G#'; } socket_write($sock,$msg,strlen($msg));} socket_write($sock,'R#',2); //Requisita o status do sistema. // Espera e lê o status e define a cor dos botões de acordo.$status = socket_read($sock,6);if (($status[4]=='L')&&($status[5]=='#')) { if ($status[0]=='0') $cor1 = lightcoral; else $cor1 = lightgreen; if ($status[1]=='0') $cor2 = lightcoral; else $cor2 = lightgreen; if ($status[2]=='0') $cor3 = lightcoral; else $cor3 = lightgreen; if ($status[3]=='0') $cor4 = lightcoral; else $cor4 = lightgreen; echo "<form method =\"post\" action=\"engenheirando.php\">"; echo "<input type=\"hidden\" name=\"bits\" value=\"$status\">"; echo "<button style=\"width:70; background-color: $cor1 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Fora\">Fora</button></br></br>"; echo "<button style=\"width:70; background-color: $cor2 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Quarto1\">Quarto1</button></br></br>"; echo "<button style=\"width:70; background-color: $cor3 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Quarto2\">Quarto2</button></br></br>"; echo "<button style=\"width:70; background-color: $cor4 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Sala\">Sala</button></br></br></br>"; echo "<button style=\"width:90;font: bold 14px Arial\" type = \"Submit\" Name = \"Pequeno\">Portao Pequeno</button></br></br>"; echo "<button style=\"width:90;font: bold 14px Arial\" type = \"Submit\" Name = \"Grande\">Portao Grande</button></br></br>"; echo "</form>";}// Caso ele não receba o status corretamente, avisa erro.else { echo "Falha ao receber status da casa."; }socket_close($sock);?> </body></html>
Obs,: Os códigos foram tirados do site engenheirando.com
Desde já, muito obrigado.…