A falta de pontos fixos de venda em eventos que ocorrem em cidades distantes. Máquinas de vendas convencionais são grandes e pesadas o que dificulta o transporte fazendo com que oportunidades de vendas em eventos sejam perdidas para isso a nossa solução propõem um projeto de máquina de vendas automática portátil onde que é facilmente carregada de evento em evento trazendo assim uma maior eficiência e maiores oportunidades, abaixo será documentado as etapas e processos para o desenvolvimento do MVP desta solução
- Clone este repositório
git clone https://github.com/gustavoalvessouza/iot-abp-api.git
- Instalar pacotes
pnpm install
- Rodar aplicação em modo de desenvolvimento
pnpm start:dev
- Preencha as variaveis de ambiente no arquivo .env de acordo com o exemplo no arquivo .env.example.
- 3 ESP32
- 2 Motores de Passo 28byj-48
- 2 Controladores de Motor de passo Driver Uln2003 Arduino Robótica/nf
- 2 Sensores Ultrassonicos Hc-Sr04
- 1 Fonte 5V
- O projeto utiliza o ambiente de execução Node.js, que permite a execução de código JavaScript do lado do servidor. O código é desenvolvido principalmente em JavaScript, com o uso opcional de TypeScript para fornecer tipagem estática e outras funcionalidades avançadas.
- O Prisma é o principal ORM (Object-Relational Mapping) escolhido para a interação com o banco de dados. Ele simplifica a manipulação de dados, oferecendo uma abstração intuitiva para consultas ao banco de dados MongoDB.
- O banco de dados escolhido para armazenar os dados do projeto é o MongoDB. Sua natureza de banco de dados NoSQL oferece flexibilidade e escalabilidade, adequando-se bem às necessidades do projeto.
O projeto adota uma arquitetura limpa, que visa separar as responsabilidades em diferentes camadas para facilitar a manutenção e escalabilidade do sistema. A orientação a objetos é utilizada para promover um design modular e coeso.
- Este módulo é responsável por gerenciar as máquinas de venda. As entidades associadas incluem informações sobre as máquinas e funcionalidades relacionadas à venda de produtos.
- O módulo vendingMachinesConveyors concentra-se no gerenciamento das esteiras das máquinas de venda.
- O módulo products gerencia as informações sobre os produtos disponíveis para venda. Isso inclui detalhes como nome, preço e descrição.
- Este módulo armazena o histórico de vendas dos produtos. Ele registra informações relevantes sobre cada transação realizada.
- O módulo shoppings é responsável por armazenar a fila de vendas. Ele gerencia a ordem em que as transações são processadas, garantindo uma experiência de compra eficiente.
A documentação das APIs está disponível no Postman para facilitar o teste e entendimento das funcionalidades. Você pode acessar a coleção Postman aqui
- 1ª A parte de pagamentos foi feita por meio de um API do mercado pago, aonde que foi criado uma conta da plataforma de developers do mercado pago para ter acesso a um acces token
- 2ª Tendo o token de acesso foi criado um endpoint para a API que faz uma requisição do tipo POST para o endpoint do mercado /payaments passando todas as informações sendo elas, valor do pix, dados do comprador, endereço e access token
- 3ª A API do mercado pago retorna um JSON contendo o QR CODE para o pagamento ser efetuado via pix
- 4ª Para consultar o status do pagamento utilizamos o endpoint /payments, porém consultando via GET para ter a resposta se o pagamento foi efetuado com sucesso e prosseguir para próxima etapa.
Front-end Feito em ReactJs Utilizando Vite. Vite é uma ferramenta de construção de projetos de frontend que se destina a oferecer uma experiência de desenvolvimento mais rápida e leve para projetos de web modernos.
- get(): Na página Home temos a função de get() que foi utilizada para buscar todos os dados dos produtos na máquina de vendas pelo endpoint: vending-machines/:id/products
-
payment(): A função de pagamento foi utilizada para realizar o pagaemnto do produto via pix na api do mercado pago pelo endpoint /payments/pix. Vale citar que, transaction_amount foi setado para 0.01 para fins de pix ilustrativos.
-
getPaymentStatus(id): A função checa se o pagamento foi aceito e validado, o parametro id vem no momento em que o pagamento é acionado ele retorna o id do pagamento, onde o mesmo é passado para a função que possui o endpoint: /payments/:id .
-
postConveyor(): A função posta para o backend qual é a esteira que ele deseja que caia o produto, para isso, passamos o conveyorId no body da requisição do endpoint: /shoppings, body:{conveyorId: id}.
Para a estilização do front-end foi utilizada a biblioteca styled-components. A biblioteca permite fazer estilos em CSS nos arquivos JS, o que se torna mais fácil a criação de componentes.
- Inclui as bibliotecas
- Define os pinos
- Inicia os pinos de entrada e saída.
- Inicia o wifi com auxílio do wifi maneger, que cria uma rede do esp para conectarmos com o celular e configurar em qual rede wifi ele deve conectar.
- Inicia a task que fica consultando o backend se temos uma venda, assim que temos uma venda ele chama a função de ligar a esteira.
- Função de ligar a esteira que gira o motor e inicia a leitura do sensor
- Leitura do sensor, fica lendo o sensor e quando temos uma distância menor que 7cm (passa um item) ele desliga.
- Inicia uma rede WIFI para os ESP32 das Esteiras se conectarem a uma rede Wifi para poderem compratilhar a internet
- Utiliza da biblioteca Wifimaneger para conectar as esteiras ao wifi
Alaercio Marques | Belone Zorzeto | Carlos Pasquali | Daniel Milak |
Gustavo Alves |
Vítor Penteado |