Ir ao conteúdo

Posts recomendados

Postado

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
  • Membro VIP
Postado
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;
//...
}

 


 

 

Postado
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
 

 

 

  • Membro VIP
Postado

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

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