Ir ao conteúdo
  • Cadastre-se

Arduino node mcu esp8266 - ajuste na linha de programação


Posts recomendados

Prezados,

 

Saudações.

 

Estou pedindo a humilde salvação de vocês para solução de um problema simples ao qual se tornou uma bola de neve devido a minha falta de conhecimento.

Eu estou querendo montar um protótipo de uma casa, utilizando IoT. Para isso, fiz uso do Microcontrolador ESP8266 e Também estou utilizando o AppInventor para facilitar minha vida com o aplicativo.

 

LINK DO EXEMPLO:

 

https://medium.com/@cristianalopesgabriel/app-inventor-esp8266-145a96f969e

 

 

Fiz todo o procedimento e funcionou corretamente. Porém, gostaria de adicionar mais leds para este exemplo. Na plataforma AppInventor, sei fazer este procedimento para enviar o comando ao microcontrolador. Mas meu problema maior é adaptar o código desse exemplo no IDE para aceitar mais comandos para um segundo led.

 

Sei que para o Led existente ligar, ele vai receber a informação /gpio/0 para desligar e gpio/1 para ligar do Appinventor. Porém, gostaria de adicionar mais um led recebendo dessa vez /gpio1/0 ou /gpio1/1.

 

// Biblioteca Wi-Fi library
#include <ESP8266WiFi.h>

// Credenciais de acesso à rede
const char* ssid = UserWifi”;
const char* password = PassWifi”;

// Número da porta (80) do servidor web
WiFiServer server(80);

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

// Definir GPIO2
pinMode(4, OUTPUT);
digitalWrite(4, 0);

// Conectar à rede WiFi
Serial.print(“A ligar a: “);
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(”.”);
}

Serial.println("");
Serial.println(“Ligado”);
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();

}

void loop() {
// Verificar se o cliente se conectou
WiFiClient client = server.available();
if (!client) {
return;
}

// Espera até que o cliente envie alguns dados
Serial.println(“Novo Cliente.”);
while(!client.available()){
delay(1);
}

// Lê a primeira linha do pedido
String req = client.readStringUntil(’\r’);
Serial.println(req);
client.flush();

// Corresponde ao pedido
int val;
if (req.indexOf("/gpio/0") != -1)
val = 0;
else if (req.indexOf("/gpio/1") != -1)
val = 1;
else {
Serial.println(“invalid request”);
client.stop();
return;
}

// Defini o GPIO2 de acordo com o pedido
digitalWrite(4, val);

client.flush();

// Prepare a resposta
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nLED ";
s += (val)?“Ligado”:“Desligado”;

// Envie a resposta para o cliente
client.print(s);
delay(1);
Serial.println(“Cliente desligado.”);
}

 

Como eu adaptaria essa programação para esse feito ?

 

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

  • Membro VIP
24 minutos atrás, WellTeixeira98 disse:

String req = client.readStringUntil(’\r’); Serial.println(req);

Você pode tentar usar esta informação pra acionar quantos leds quiser.

Perceba que vai ter que ter o controle bit a bit do byte

unsigned char val=...req convertido em byte;
digitalWrite(4, (val>>0)&1);
digitalWrite(5, (val>>1)&1);
digitalWrite(6, (val>>2)&1);
digitalWrite(7, (val>>3)&1);

Pra converter em byte ou int na 'moleza' do sw, consulte p.ex. a função atoi()

 

Ou p.ex. com switch case pra criar funções

switch (val) {
case (x) faca_isso();break;
case (y) faca_aquilo();break;
case (z) faca_outra_coisa();break;
//...
}

 


 

 

Link para o comentário
Compartilhar em outros sites

33 minutos atrás, if. disse:

Você pode tentar usar esta informação pra acionar quantos leds quiser.

Perceba que vai ter que ter o controle bit a bit do byte


unsigned char val=...req convertido em byte;
digitalWrite(4, (val>>0)&1);
digitalWrite(5, (val>>1)&1);
digitalWrite(6, (val>>2)&1);
digitalWrite(7, (val>>3)&1);

Pra converter em byte ou int na 'moleza' do sw, consulte p.ex. a função atoi()

 

Ou p.ex. com switch case pra criar funções


switch (val) {
case (x) faca_isso();break;
case (y) faca_aquilo();break;
case (z) faca_outra_coisa();break;
//...
}

 

Obrigado pela resposta.

Teria como me mostrar isso integrando na programação que citei ?
Para eu entender melhor e poder andar sozinho
 

 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Só porque gostei do projeto🙂

Chute serve? Tenta algo como:

// Lê a primeira linha do pedido ... não conheço o protocolo. Veja qual linha tem dado útil

String req = client.readStringUntil(’\r’);

Serial.println(req);

client.flush(); // Corresponde ao pedido int val;

int val=atoi(reg);

Coloque val nas saídas (todas) pra ver que merdadá. Coloque leds

unsigned char i;

for (i=1;i<16;i++) digitalWrite(i, (val>>(i-1))&1);

😁

 

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

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!