Índice:
- Etapa 1: conecte o NodeMCU ao Wi-Fi
- Etapa 2: Solicitar dados de HTTPS de ANWB.nl
- Etapa 3: Transforme os dados em informações utilizáveis
- Etapa 4: instalar o acionador
- Etapa 5: Feedback do projeto
- Etapa 6: execute o código
Vídeo: Verificação de relatório de tráfego (NL) com capacho: 6 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
Neste instrutível, descreverei como construir um capacho que verificará os relatórios de tráfego das rodovias holandesas. Assim que você sair do capacho e houver um engarrafamento no seu percurso, o tapete ficará vermelho. Quando não houver engarrafamento, o tapete ficará verde.
Eu estarei trabalhando em um NodeMCU 1.0 (Módulo ESP0-12E). O código para este projeto também pode funcionar em outros dispositivos (por exemplo, placas Arduino). Este projeto é baseado em uma fonte holandesa de relatórios de tráfego, o ANWB.
O que precisamos para este projeto:
- NodeMCU - Fios de ligação - LEDlight ou tira - Sensor analógico (folha de Aluminiuim, esponja) - Conexão Wi-Fi - Capacho
Passos que devemos dar:
1. Conecte o NodeMCu ao Wi-Fi 2. Solicite dados via HTTPS de ANWB.nl 3. Transforme os dados em informações utilizáveis 4. Instale o acionador 5. Feedback do projeto
Etapa 1: conecte o NodeMCU ao Wi-Fi
Esta etapa mostrará como fazer um HTTPSRequest com êxito para ver se o dispositivo está conectado à Internet.
Primeiro, instale a biblioteca ESP8266 no Arduino IDE. Abra a partir dos exemplos ESP8266>
Preencha suas credenciais de Wi-Fi na parte superior do seu código, conforme mostrado abaixo:
const char * ssid = "YOUR_SSID";
const char * password = "YOUR_PASS";
Faça upload do código para o seu dispositivo e verifique se o NodeMCU está se conectando à Internet. O exemplo HTTPSRequest usa o Github como padrão para obter informações. Quando o HTTPSRequest for bem-sucedido, você receberá os dados do Github no monitor serial.
Etapa 2: Solicitar dados de HTTPS de ANWB.nl
Nesta segunda etapa, você altera a fonte de dados do padrão para a fonte necessária para este projeto: ANWB.nl.
No topo do seu código, altere char * host para www.anwb.nl (ou outra fonte da qual você gostaria de obter seus dados):
const char * host = "www.anwb.nl";!! Se você usar outra fonte, a etapa 3 será diferente do meu código. A etapa 3 precisa de codificação específica para recuperar informações úteis!
Em seguida, altere o URL da string na configuração da função para "/ feeds / gethf", o caminho de onde as informações são obtidas:
String url = "/ feeds / gethf";!! Se você usar outra fonte, use o caminho para sua fonte!
Ao fazer upload do código, você deve obter uma resposta com todos os dados de www.anwb.nl/feeds/gethf. Este código é salvo em uma string chamada linha.
Etapa 3: Transforme os dados em informações utilizáveis
Até agora, o código só rodava quando o NodeMCU era inicializado ou zerado, pois todo o código estava na função de configuração. Para definir o gatilho para executar o código continuamente, você deve alterar a posição do código que executa a solicitação HTTPS. Abaixo da função de loop, você adiciona outra função. Eu chamei de void extractData:
extractData () {
}
Copie parte do código da função de configuração para extractData (). Comece com a seguinte linha até o final da função de configuração:
if (! client.connect (host, O código agora está em sua nova função, portanto, remova o código copiado da função de configuração.
Em seguida, chame a função extractData na função de loop e adicione algum atraso para dar tempo ao nodeMCU para descansar:
void loop () {
extractData (); atraso (30000); // isso será removido mais tarde, quando tivermos um sensor analógico}
Como os dados que você recebe são armazenados em uma string e apenas partes dessa string são necessárias, você deve escrever alguns loops for.
Primeiro, verifique todas as posições da palavra 'estrada'. Após a palavra 'estrada', segue-se o nome da estrada (A1, A2, etc.).
Antes de começar a escrever os loops for, você deve declarar algumas variáveis que usará:
int noOfPos = 0;
boolean hasRunOnce = false; int de = 0; int roadArray [20];
Agora é hora de escrever alguns loops. Eu escrevi os loops for na parte inferior da função extractData. Tentei dividi-lo em funções separadas, mas não consegui fazer funcionar.
Para o loop nº 1: encontre as posições da palavra estrada na linha da string:
for (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", de); roadArray [noOfPos] = pos; noOfPos + = 1; from = pos + 1; if (hasRunOnce == true && pos == line.indexOf ("road \": ")) {i = line.length (); } hasRunOnce = true; }
Em seguida, verifique quais estradas têm um engarrafamento, usando as posições do loop for de cima. As posições dos nomes das estradas são sempre as mesmas e começam com 7 caracteres e terminam com 10 caracteres após a palavra estrada.
Agora definimos o array nameOfRoadArray, que será preenchido no próximo loop for:
String nameOfRoadArray [20];
Para o loop nº 2: Encontre todos os nomes das estradas com a entrada de para o loop no. 1
para (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); }
O array nameOfRoudArray deve ser preenchido com todos os engarrafamentos sinalizados.
A seguir, você verificará se sua estrada está dentro de um conjunto de estradas com congestionamento. Imprima o nameOfRoadArray para obter as estradas nos dados. Faça isso adicionando o Serial.println (nameOfRoadArray [k]); no segundo loop for como:
para (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); Serial.println (nameOfRoadArray [k]); }
Se estiver certo, você verá todas as estradas com engarrafamento no monitor serial.
Antes de escrever o último loop For, você deve declarar um booleano como uma variável global. O booleano, chamado trafficJam, é falso por padrão e mudará se a função extractData retornar true para um congestionamento. O código a seguir vai no topo do arquivo.ino:
boolean trafficJam = false;
Para o laço nº 3: verifique se a estrada, neste caso A1, está na lista de engarrafamentos.
for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// mude A1 para a estrada de seu favor trafficJam = true;}
Se você imprimir o engarrafamento no monitor serial, saberá se há um engarrafamento na A1 ou não.
Coloque este código na parte inferior da função extractData:
Serial.println (trafficJam); // veja se há um engarrafamento
Com essas informações, trabalharemos mais no feedback do sistema na etapa 5.
Etapa 4: instalar o acionador
Como agora podemos recuperar os dados com sucesso da fonte, é hora de construir um sensor que irá acionar o nodeMCU para executar a função extractData. Decidi fazer um sensor analógico com meu capacho. Você pode alterar o gatilho usando outro sensor.
Construindo o sensor analógico
Usei 2 pedaços de papel alumínio, dois fios de ligação e uma esponja.
Faça um furo na esponja, este é o local onde as folhas de alumínio entrarão em contato. Cole a folha de alumínio em ambos os lados da esponja. Conecte os fios do jumper à folha de alumínio. Conecte os fios do jumper ao nodeMCU. Um lado para o pino A0 e o outro para um pino V3. Coloque a esponja sob o capacho e você acaba de transformá-lo em um sensor. Incrível!
O código para ler o valor do sensor para ver se alguém está no capacho:
int sensorValue = analogRead (A0);
if (sensorValue == 1024) {extractData (); }
Quando a folha de alumínio está fazendo contato (quando alguém está em cima do tapete), o sensorValue é 1024. Isso resulta no disparo da função extractData (). E é exatamente isso que queremos que o sistema faça.
Etapa 5: Feedback do projeto
Usei um LEDstrip para dar feedback ao usuário. Quando há um engarrafamento, a luz fica vermelha. Quando a estrada estiver pronta, ela ficará verde. Usei a biblioteca adafruit neopixel para controlar meu LEDstrip.
Escreva este código no topo do seu arquivo para se certificar de que a LEDstrip está definida:
#incluir
#define PIXEL_PIN D5 #define PIXEL_COUNT 10 #define PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel pixels = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);
Escreva o próximo código na função de configuração:
// neopixel
pixels.begin (); pixels.show ();
E o seguinte código na função de loop:
if (trafficJam == true) {
para (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // pixels vermelhos.show (); atraso (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // pixels verdes.show (); atraso (200); }
No código acima, existe uma função if / else. Quando a função extractData retorna a presença de um engarrafamento, o LEDstrip fica vermelho. Caso contrário, o LEDstrip ficará verde.
Etapa 6: execute o código
Se executarmos o código completo agora, o sensor e a luz devem funcionar. Quando você estiver no capacho, o sensor se conectará e a função extractData será executada. Quando no conjunto de nomes de estradas, a estrada que procuramos estiver presente, a faixa de LED ficará vermelha, sinalizando um engarrafamento. Se não estiver na matriz, o LEDstrip ficará verde e você saberá que está pronto para prosseguir!
Tenha uma boa viagem e obrigado pela leitura. Espero que você tenha encontrado alguma inspiração ou informação. Se você recebeu algum feedback, fique à vontade para responder!
Recomendado:
Relatório Periódico Excel: 6 etapas
Relatório Periódico do Excel: Aqui estão minhas dicas para relatórios de consumo periódicos no Excel 2010. No vídeo tutorial abaixo, este relatório nos fala sobre o consumo específico de eletricidade, água, oxigênio, nitrogênio por tonelada de produto acabado, de acordo com semanal, mensal, trimestral
A verificação de sanidade: 5 etapas (com imagens)
A Verificação de Sanidade: Este projeto tem tudo a ver com a sanidade, ou seja, verificar se ela é verificada regularmente. A melhor maneira de fazer isso acontecer é construir uma máscara que brilhe de vermelho aleatoriamente. Muitas vezes é perceptível, mas esparsamente o suficiente para fazer as pessoas duvidarem
TouchFree: Quiosque de verificação automática de temperatura e detecção de máscara: 5 etapas
TouchFree: Quiosque automatizado de verificação de temperatura e detecção de máscara: com a reabertura de países ao redor do mundo, viver com o novo coronavírus está se tornando um novo estilo de vida. Mas para parar a propagação do vírus, precisamos separar as pessoas que têm o Coronavírus do resto. De acordo com o CDC, a febre é o l
Relatório meteorológico usando os miniaplicativos ThingSpeak MQTT e IFTTT: 8 etapas
Relatório meteorológico usando ThingSpeak MQTT e miniaplicativos IFTTT: IntroduçãoUm aplicativo meteorológico baseado em nuvem que fornece relatórios meteorológicos diários como notificação por e-mail. Este aplicativo da web mede temperatura e umidade usando SHT25 e Adafruit Huzzah ESP8266. Ele nos fornece temperatura e umidade em tempo real
Relatório - Monitor de desempenho do driver: 5 etapas
Relatório - Monitor de desempenho do driver: Relatório !? O que é isso? É um dispositivo eletrônico que coleta dados de caminhões em tempo real e os utiliza para gerar um relatório sobre como o caminhão foi conduzido durante a viagem, mostrando-o em plataforma Iot para gestores de frota. Nosso objetivo é colaborar