Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/infinitemarcus/arduino-discord-integration
Prova de conceito de comunicação entre placa Arduino e aplicação Node.js de bot de Discord (com Discord.js)
https://github.com/infinitemarcus/arduino-discord-integration
arduino discord discord-bot discordjs nfc nodejs pn532
Last synced: about 4 hours ago
JSON representation
Prova de conceito de comunicação entre placa Arduino e aplicação Node.js de bot de Discord (com Discord.js)
- Host: GitHub
- URL: https://github.com/infinitemarcus/arduino-discord-integration
- Owner: InfiniteMarcus
- License: mit
- Created: 2022-09-22T02:05:20.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-07-15T01:37:12.000Z (6 months ago)
- Last Synced: 2024-11-19T08:10:14.510Z (2 months ago)
- Topics: arduino, discord, discord-bot, discordjs, nfc, nodejs, pn532
- Language: JavaScript
- Homepage:
- Size: 19.3 MB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Integração Arduino-Discord
## Conceito do projeto
Este projeto é uma prova de conceito que visa mostrar como possibilitar a comunicação entre uma placa Arduino e um bot de Discord que utiliza o wrapper Discord.jsTanto o Arduino quanto o conceito de bots de forma geral estão muito ligados com usos para automação e modernização da tarefas. Entretanto, o primeiro é mais focado em hardware e interações com o mundo real, enquanto o segundo é mais aplicado à software e conhecido no mundo virtual.
Dessa forma, este projeto se propõe a integrar ambos os conceitos, estabelecendo o envio de dados entre Arduino e bot e vice-versa.
## Comandos e funções
### Do bot para o Arduino
- Usar comando de `/pisca-pisca` para fazer o LED piscar algumas vezes
- Usar comando de `/musica` para começar a tocar uma música que poderá ter seu volume alterado pelo Arduino### Do Arduino para o bot
- Usar uma tag NFC/RFID para fazer o LED piscar
- Usar uma tag NFC/RFID para enviar uma mensagem de acesso autorizado para o Discord
- Alterar o volume de uma música sendo tocada no Discord usando o potenciômetro do Arduino## Pré-requisitos e recursos utilizados
Os recursos utilizados neste projeto foram:### Hardware
1. **Arduino Nano** (outras placas podem ser utilizadas, utilizadas as devidas adaptações)
2. **Potenciômetro linear de 10KΩ**, para controle de volume
3. **Leitor RFID NFC PN532** (ou similar), para leitura de tags NFC ou similares
4. **Jumpers/cabos** para fazer a conexão entre os componentes
5. Cabo para conectar o Arduino em um computador
6. (Opcional) LED e resistor para funções de pisca-pisca (geralmente as placas Arduino já possuem um LED embutido. É este que estou usando no projeto mas você pode usar o seu próprio)Imagem do circuito comentado:
![Circuito](https://github.com/InfiniteMarcus/Arduino-Discord-Integration/blob/main/docs/circuito_comentado.png)### Software
1. **Node.js** (linguagem padrão do bot e meio pelo qual se estabece a conexão serial com o Arduino. O projeto foi testado na **versão 17**)
2. **NPM** (gerenciador de dependências do Node)
3. **Arduino IDE 2.0** (para fazer upload do código para o Arduino)
4. **Discord.js** (para conexão com o Discord, incluso nas dependências do NPM)
5. **[PN532_I2C.h](https://github.com/elechouse/PN532/tree/PN532_HSU/PN532_I2C)**, para usar o leitor NFC com I2C. Para usar com outras formas de comunicação, baixar a biblioteca correta e fazer as adaptações necessárias
## Passo a passo
1. Escrevi o código para o funcionamento do bot de Discord
- Baseado em experiências passadas, esta parte foi relativamente fácil. Decidi quais seriam as funções principais do bot para comprovar que pude estabelecer a comunicação entre Arduino-Node.js
2. Comprei/encontrei os componentes do circuito, como a placa Arduino e o leitor NFC
- **Dica:** Diferentemente de software, o hardware pode vir com defeitos de fábrica que tornem necessário testar outras peças ou fazer trocas. Logo, quando algo não funciona, nem sempre foi um erro seu. Verifique se o componente está queimado ou se funciona em outro circuito mais simples
3. Pesquisei materiais na internet sobre comunicação serial do Arduino com código Node.js
4. Instalei e testei as dependências do Node.js no meu código
5. Realizei testes de envio e recebimento de dados entre ambas os lados
6. Implementei os últimos detalhes necessários no código para que tudo funcionasse bem## Instalação
### Variáveis de ambiente
Este arquivo usa variáveis de ambiente que deverão ser definidas antes da execução do programa.As variáveis usadas são:
- `BOT_TOKEN`: token do seu bot de Discord (pode ser gerado no [painel do desenvolvedor](https://discord.com/developers/applications))
- `CHANNEL_ID`: ID de canal do Discord onde o bot enviará mensagens
- `GUILD_ID`: ID de servidor do Discord que o bot usará de base para se conectar aos canais de voz
- `AUTHORIZED_TAG`: valor de tag NFC/RFID para enviar mensagem de acesso autorizado
- `BLINK_TAG`: valor de tag NFC/RFID para piscar o LED
- `CLIENT_ID`: ID do bot de Discord (para registrar os [slash commands](https://discordjs.guide/interactions/slash-commands.html))
- `ARDUINO_PORT`: valor da porta do computador a qual o Arduino se conectou### Programação
É recomendável fazer esta parte primeiro, começando pelo Arduino.
Você precisará do valor da porta do Arduino para configurar o Node, e você precisará que o código seja enviado para o Arduino para ligar o circuito por completo.
#### Parte do Arduino
1. Abra a IDE do Arduino, com o código do arquivo `Sensor.ino`
2. Conecte a sua placa Arduino ao computador
3. Na IDE, selecione o modelo correto de Arduino e a porta na qual se encontra a placa
4. Realize a compilação e envio do código para a placa#### Parte do Node.js
1. Baixe o projeto do repositório
2. Execute o comando `npm install` para instalar as dependências
3. Crie um arquivo `.env` com as variáveis de ambiente necessárias, baseado em `.env.template`
4. Execute o comando `npm run start` para testar o programa### Montagem do circuito
Imagem do circuito completo:
![Circuito](https://github.com/InfiniteMarcus/Arduino-Discord-Integration/blob/main/docs/circuito.png)**É altamente recomendado você montar o circuito com a energia desligada e sem qualquer cabo conectado entre sua placa Arduino e o computador.**
A partir do momento em que o código for enviado para o Arduino e o circuito montado e conectado ao computador, a aplicação deverá funcionar.
### Arquivos
Além disso, para usar a funcionalidade de música, é necessário criar uma pasta `/media` com um arquivo `music.ogg`. Fique a vontade para escolher a música que você quiser.
**Recomendação:** Em bots mais complexos, é possível tornar esse sistema dinâmico para pegar sons e músicas de algum outro lugar, por exemplo.
## Execução
Para executar o projeto, é necessário:
- Ter o circuito corretamente montado
- Ter feito upload do código para a placa Arduino
- Estar rodando a aplicação Node.js, sem erros
- Se algum erro ocorrer, provavelmente:
- Alguma variável de ambiente não foi setada
- Alguma variável de ambiente está com valor inválido
- A comunicação entre Arduino-PC ou entre Arduino-Node não foi estabelecida
- Não foi possível conectar o código Node.js com o seu bot de Discord
- Ter em mãos as tags NFC/RFID setadas nas variáveis de ambiente não foi setada
- Estar conectado no servidor de Discord setado nas variáveis de ambientePara isso, basta seguir os passos descritos na seção de **Instalação**.
**Observação:** também há a possibilidade de algum componente do circuito estar queimado ou não conectado direito. Tome cuidado na hora de montar o circuito!
O comando para executar a aplicação Node.js é `npm run start` (ou derivado disso).
## Bugs/problemas conhecidos
Atualmente, o projeto se encontra com algumas limitações:
- É necessário ter o Arduino conectado (via cabo) ao mesmo computador que está rodando o bot de Discord
- É necessário mudar manualmente no arquivo `.env` o valor da porta na qual o Arduino está conectado (que pode mudar dependendo da entrada em que você conecta a placa)É esperado que em futuras versões, a conexão entre a placa e o código seja feita de forma sem fio, por Bluetooth ou Wi-fi. Isso resolveria ambos os problemas apresentados, mas necessitaria de diversas alterações no código e no circuito.
## Autores
* Marcus Vinícius N. Garcia ([Infinitemarcus](https://github.com/Infinitemarcus))## Referências
- https://how2electronics.com/interfacing-pn532-nfc-rfid-module-with-arduino/
- https://discordjs.guide/#before-you-begin
- https://medium.com/@machadogj/arduino-and-node-js-via-serial-port-bcf9691fab6a
- https://itp.nyu.edu/physcomp/labs/labs-serial-communication/lab-serial-control-of-an-arduino/## Imagens/gifs
![Circuito montado](https://github.com/InfiniteMarcus/Arduino-Discord-Integration/blob/main/docs/circuito_montado.jpg)
![Tag para piscar LED](https://github.com/InfiniteMarcus/Arduino-Discord-Integration/blob/main/docs/tag_pisca.gif)
![Tag para acesso autorizado](https://github.com/InfiniteMarcus/Arduino-Discord-Integration/blob/main/docs/tag_acesso.gif)