Este projeto implementa um sistema de notificação que avisa quando o ônibus circular da UFPB está se aproximando do Centro de Informática (CI). O sistema usa comunicação sem fio através de módulos nRF24L01+ e envia notificações via Telegram.
O sistema é composto por três partes principais:
- Emissor (Arduino): Instalado no ônibus, envia periodicamente o sinal identificador "CIRCULAR_CI".
- Receptor (ESP8266/NodeMCU): Instalado próximo ao CI, recebe o sinal do ônibus, pisca um LED, ativa um buzzer e envia uma notificação via Telegram.
- Bot Telegram: Interface para os usuários receberem as notificações em seus smartphones.
Todos os arquivos estão na raiz do projeto:
emissor.ino- Código para o Arduino que envia o sinal do ônibusreceptor.ino- Código para o ESP8266 que recebe o sinal e envia notificaçõestelegram_bot.py- Implementação do bot Telegram usando Pythonrequirements.txt- Dependências Python para o bot Telegram.env- Arquivo para armazenar variáveis de ambiente (não incluído, deve ser criado)
- Arduino Uno/Nano/Pro Mini
- Módulo nRF24L01+
- NodeMCU ou ESP8266
- Módulo nRF24L01+
- LED (embutido no NodeMCU D4/GPIO2)
- Buzzer HXD (conectado ao pino D1/GPIO5)
- Fonte de alimentação
nRF24L01+ -> Arduino
-----------------
VCC -> 3.3V
GND -> GND
CE -> Pino 9
CSN -> Pino 10
SCK -> Pino 13 (SCK)
MOSI -> Pino 11 (MOSI)
MISO -> Pino 12 (MISO)
nRF24L01+ -> ESP8266/NodeMCU
-----------------
VCC -> 3.3V
GND -> GND
CE -> GPIO4 (D2)
CSN -> GPIO15 (D8)
SCK -> GPIO14 (D5)
MOSI -> GPIO13 (D7)
MISO -> GPIO12 (D6)
Buzzer HXD -> ESP8266/NodeMCU
-----------------
+ -> GPIO5 (D1) (com resistor 100-220Ω opcional)
- -> GND
- Carregue o código
emissor.inono Arduino usando a IDE Arduino - Verifique se as conexões dos pinos estão corretas
- O emissor começará a enviar o sinal "CIRCULAR_CI" automaticamente a cada 5 segundos
- Edite o arquivo
receptor.inopara incluir:- Credenciais de WiFi (
ssidepassword) - Token do bot Telegram (
token) - ID do chat Telegram (
chat_id)
- Credenciais de WiFi (
- Carregue o código no ESP8266/NodeMCU usando a IDE Arduino (certifique-se de ter as bibliotecas ESP8266 instaladas)
- O receptor começará a aguardar sinais do emissor
- Crie um arquivo
.envna raiz do projeto com o seguinte conteúdo:BOT_TOKEN=seu_token_aqui - Instale as dependências:
pip install -r requirements.txt - Execute o bot:
python telegram_bot.py - Use o comando
/chatidno chat do Telegram para obter o ID do chat necessário para configurar o receptor
- O módulo emissor instalado no ônibus envia constantemente o sinal "CIRCULAR_CI"
- O receptor próximo ao CI detecta esse sinal quando o ônibus se aproxima
- Quando o sinal é detectado:
- O LED pisca 5 vezes (500ms ligado, 500ms desligado)
- O buzzer toca por 0,5 segundos (respeitando um intervalo mínimo de 30 segundos entre toques)
- Uma notificação é enviada via Telegram (respeitando um intervalo mínimo de 5 minutos entre notificações)
- Os usuários do bot Telegram podem usar os seguintes comandos:
/start- Inicia o bot e mostra uma mensagem de boas-vindas/ajuda- Exibe ajuda sobre os comandos disponíveis/info- Mostra informações sobre o bot/horarios- Exibe os horários do ônibus circular/chatid- Obtém o ID do chat para configuração do receptor
- Verifique se o LED de alimentação do módulo nRF24L01+ está aceso
- Verifique se as mensagens "Sinal enviado com sucesso!" aparecem no monitor serial
- Verifique a sintaxe do código, especialmente a instrução
delay(5000)que precisa terminar com ponto e vírgula
- Verifique se o ESP8266 está conectado ao WiFi (mensagem "Conectado ao WiFi")
- Teste a conexão com o Telegram usando uma mensagem de teste
- Verifique se o módulo nRF24L01+ está alimentado corretamente
- Se ocorrer o erro "Failed to connect to ESP8266: Timed out waiting for packet header" durante o upload:
- Coloque o ESP8266 em modo de programação manualmente (pressione o botão FLASH/GPIO0 enquanto pressiona e solta o botão RESET)
- Tente um cabo USB diferente ou outra porta USB
- Verifique as permissões da porta serial (em Linux:
sudo chmod a+rw /dev/ttyUSB0)
- Certifique-se de que o bot foi iniciado corretamente
- Verifique logs para qualquer erro de comunicação com a API do Telegram
- Confirme se o arquivo
.envcontém o token correto
- Ajuste o intervalo de envio do emissor alterando o valor do
delay(atualmente 5000 ms) - Ajuste o intervalo mínimo entre notificações alterando
notificationIntervalno receptor (atualmente 300000 ms = 5 minutos) - Ajuste o intervalo mínimo entre toques do buzzer alterando
buzzerInterval(atualmente 30000 ms = 30 segundos) - Ajuste a duração do toque do buzzer alterando
buzzerDuration(atualmente 500 ms = 0,5 segundos) - Modifique a mensagem de notificação conforme necessário
- O alcance do módulo nRF24L01+ é limitado (aproximadamente 100 metros em campo aberto)
- O receptor requer conexão WiFi estável para enviar notificações
- O uso de
delay()no loop do receptor pode afetar a responsividade do sistema