Índice:
- Etapa 1: Fazendo O Setup Inicial Da DragonBoard 410c
- Etapa 2: Fazendo O GPS Da DragonBoard 410c Localizar Seu Dispositivo
- Etapa 3: Instalando O Dongle USB 3G / 4G
- Etapa 4: Transformando um DragonBoard 410c Em Hotspot / Access Point WiFi
- Etapa 5: Acessando um DragonBoard 410c Por SSH Sem Fio, Utilizando O Hotspot
- Etapa 6: Ligando um DragonBoard 410c Ao OBD do Seu Carro Via Bluetooth - Passo 1/2
- Etapa 7: Ligando um DragonBoard 410c Ao OBD do Seu Carro Via Bluetooth - Passo 2/2
- Etapa 8: Ligando um DragonBoard 410c Ao OBD Do Seu Carro Usando PyOBD
- Etapa 9: Extraindo Informações Do Carro Usando Python
- Etapa 10: Repetição De Scripts E Armazenamento De Dados Capturados Do Carro
- Etapa 11: Dificuldades benefícios
- Etapa 12: Referências
Vídeo: DragonBoard Com OBD: 12 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Através da leitura do protocolo OBD2 do carro, é possível receber informações do veículo. Utilizando um DragonBoard 410c começamos a trabalhar neste projeto, e trazemos aqui o caminho detalhado para você reproduzir isso.
Este projeto foi feito em parceria com a #Qualcomm #Embarcados #Linaro #Arrow #BaitaAceleradora que permitiram que tivéssemos acesso aos melhores hardwares, além do contato com os melhores profissionais para contribuir com o desenvolvimento.
Participaram deste projeto:
- Marcel Ogando - Hacker - [email protected]
- Leandro Alvernaz - Hacker - [email protected]
- Thiago Paulino Rodrigues - Marketing - [email protected]
Temos total interesse em ajudar você a concluir o seu projeto, então não deixe de entrar em contato conosco!
Para acompanhar este projeto em inglês, clique aqui:
www.instructables.com/id/DragonBoard-and-OBD2/
A estrutura de projeto inclui os seguintes componentes, deste conforme conforme na imagem acima:
- Qualcomm DragonBoard 410c
- Interface ELM327 Bluetooth OBD2
- Dongle USB 3G / 4G
- Carregador Veicular de Inversão de Tensão (110v)
Etapa 1: Fazendo O Setup Inicial Da DragonBoard 410c
Utilizando um Qualcomm DragonBoard 410c, iniciamos o projeto com a instalação da distribuição Linaro do Linux, que não altera a configuração completa do dispositivo.
Para criar uma imagem do Linaro para um DragonBoard, utilize o Ubuntu, pelo VirtualBox, para usar o FastBoot, que é um aplicativo baseado em Linux. É necessário estar em ambiente Linux para poder instalar.
Para instalar o Fastboot, acesse o Terminal da sua Máquina Virtual Ubuntu, e digite:
sudo apt-get android-tools-fastboot
-
Para instalar o Linaro, precisamos passar por 2 passos muito importantes:
- Instalando o BOOTLOADER
-
Nome do arquivo: dragonboard410c_bootloader_emmc_linux-79.zip
- https://builds.96boards.org/releases/dragonboard410c/linaro/rescue/latest/
- Retire os arquivos de dentro do ZIP
-
Massa Entra na:
cd / NomeDaPasta (caminho da pasta descompactada)
-
Fazer o comando:
dispositivos sudo fastboot
-
Resposta esperada:
(hexadecimal) fastboot
-
Então digite:
sudo./flashall
-
Resposta esperada:
finalizado. tempo total 1.000s (sem erros)
(sem erros)
-
Instalando o Sistema Operacional
- https://builds.96boards.org/releases/dragonboard410c/linaro/debian/latest/
- Baixar dois arquivos:
-
boot-linaro-stretch-qcom-snapdragon-arm64-20170607-246.img.gz
Este arquivo é a última versão (Junho / 17) e o nome futuro pode ser alterado. A base do nome que você deve buscar é “boot-linaro-NomeDaVersão”. Nesta versão o nome é “Stretch” e a anterior foi “Jessie”
-
linaro-stretch-alip-qcom-snapdragon-arm64-20170607-246.img.gz
Este arquivo é a última versão (Junho / 17) e o nome futuro pode ser alterado. Procure por “linaro-NomeDaVersão-alip”
- Retirar os arquivos de dentro do. GZ
-
Entrar na pasta “raiz” em relação aos arquivos compactados
exemplo: “/ Downloads” que é o local onde os arquivos baixados estão
-
Entre com os comandos:
dispositivos sudo fastboot
sudo fastboot flash boot boot-linaro-NomeDaVersão-qcom-snapdragon-arm64-DATA.img
-
Resposta esperada (lembrando que o tempo pode variar):
finalizado. tempo total: 100,00s
- Conecte um mouse, teclado e um monitor / TV na porta HDMI
-
Utilizar:
- Usuário: linaro
- Senha: linaro
-
Abra uma interface Lxterminal e faça o download da lista de atualizações disponíveis dos pacotes disponíveis: locais:
sudo apt-get update
-
Perceba a instalação dos pacotes disponíveis usando o código:
sudo apt-get upgrade
Dicas: O Linaro tem um boot extremamente rápido, e uma comunidade bastante engajada para solução de problemas.
Etapa 2: Fazendo O GPS Da DragonBoard 410c Localizar Seu Dispositivo
Comece com a instalação dos aplicativos que servirão de cliente para o GPS, sendo eles o GNSS-GPSD, o GPSD e o GPSD-CLIENTES. Faça isso usando o comando:
sudo apt-get install gnss-gpsd gpsd gpsd-clients
Com ele instalado, você deseja rodar alguns comandos para iniciar o aplicativo, são eles:
sudo systemctl start qdsp-start.servicesudo systemctl start gnss-gpsd.servicesudo systemctl start qmi-gps-proxy.service
Leve sua DragonBoard 410c para um local aberto, com visada para o céu, e digite no terminal:
gpsmon –n
Pelos testes realizados, o tempo médio até as informações começarem a aparecer na tela, é de cerca de 10 minutos. Isso varia muito da localização da DragonBoard, quantidade de prédios ao seu redor, além de outras barreiras naturais que podem atrapalhar a recepção do sinal do GPS.
Para conseguir capturar essas informações e mandar para um núvem, utilize o código abaixo, alterando o endereço do seu site:
Etapa 3: Instalando O Dongle USB 3G / 4G
Existem algumas formas de fazer um DragonBoard 410c acessando uma rede 3G / 4G:
- Instalando um Shield / BreakoutBoard com Modem GSM e slot para SimCard;
- Utilizar um Dongle USB 3G / 4G;
Para este projeto optamos pelo Dongle USB 3G / 4G da Huawei modelo E3272, pela facilidade de obtenção deste dispositivo.
Para configurar o modem, você pode usar o terminal (com uma aplicação WVDial), porém o jeito mais fácil é usar uma própria interface Gráfica do Usuário (GUI) do Linaro. Faça da seguinte forma:
- Com o Dongle USB conectado, clicar com o botão direito no ícone de “redes” no canto inferior direito da tela.
- “Editar conexões”> “Adicionar”
- Escolha uma opção: “Banda larga móvel”
- Clique em “Criar”
Siga a tela de instalação do sistema operacional, conforme imagens acima, configurando uma operadora de telefonia conforme sim card comprado. Para criação deste projeto, utilizamos um Sim Card da Tim (e um modem vendido pela Vivo).
Etapa 4: Transformando um DragonBoard 410c Em Hotspot / Access Point WiFi
Para utilizar um DragonBoard 410c como um roteador wifi (agora que você já configurou uma conectividade com a internet), uma maneira mais simples é utilizar uma interface própria do sistema. Siga os passos abaixo:
- Clique no botão direito no ícone de “redes” no canto inferior direito.
- “Editar conexões”> “Adicionar”
- Escolha uma opção “WiFi”
- Clique em “Criar”
Coloque o nome da rede que você quer criar no campo "SSID" e depois altere o “Mode” para “Hotspot”.
Para garantir o funcionamento:
- Vá na aba “Configurações IPv4”
- Veja se o “Método” está marcado como “Compartilhado com outros computadores”
Etapa 5: Acessando um DragonBoard 410c Por SSH Sem Fio, Utilizando O Hotspot
Criamos um jeito de acessar uma placa remotamente, independente da forma que ela esteja conectada, não dependente de estar próximo a Dragonboard para conectar-se diretamente a ela, ou ao wifi em que ela esteja conectada. Este é o método de conexão dos servidores Linux da Amazon.
Começamos instalando o Auto SSH, utilizando o código abaixo.
sudo apt-get install gcc make
wget https://www.harding.motd.ca/autossh/autossh-1.4e.tgz tar -xf autossh-1.4e.tgz cd autossh-1.4e./configure make sudo make install
Agora vamos gerar uma chave criptografada com padrão de segurança RSA. Esta chave serve para que uma pessoa que tenha, tenha permissão para acessar a instância do endpoint exclusivo no Linux, através do IP público do modem 3G, objetivo principal deste passo. Na sequência, o código faz uma cópia da chave para o repositório de chaves classificadas do Linux, garantindo ainda mais confiança para a conexão.
ssh-keygen -t rsa
scp ~ /.ssh / id_rsa.pub usuário @ remote_server:.ssh / authorized_keys autossh -M 0 -q -f -N -i /home/pi/.ssh/id_rsa -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 2222: localhost: 22 usuário @ remote_server
Com isso, acabamos de transformar um DragonBoard 410c em um servidor cloud! / o /
Etapa 6: Ligando um DragonBoard 410c Ao OBD do Seu Carro Via Bluetooth - Passo 1/2
A interface de comunicação com os carros é feita através da porta OBD2. A informação que transita nesta porta precisa ser traduzida, e para isso precisamos de um interpretador que trate os dados. Há duas opções para este hardware: ELM327 ou STN1170.
Para este projeto, utilizamos um dispositivo Bluetooth com chip baseado em ELM327.
Importante destacar que a disponibilidade deste hardware não necessariamente representa a versão ORIGINAL do ELM327. A maior parte disponível está na versão 1.5, que foi quando o chip original foi clonado e colocado a venda no mercado. O chipset original está na versão 2.2. A evolução da versão traz ao chip mais informações sobre os carros mais novos. É importante saber disso, pois, dependendo dos testes realizados, pode ou não obter determinadas informações de veículos mais novos.
De posse do seu dispositivo OBD2 Bluetooth, encontre uma porta OBD2 do seu carro. Ela pode estar localizada logo abaixo do volante, sem console central ou perto da caixa de fusíveis. O local varia bastante entre as montadoras e modelos. Uma opção para localizar é usar esta ferramenta:
Acesse a DragonBoard 410c com SSH, utilizando seu Notebook (lembrando que agora você está no carro, e não possui mais uma tela para conectar a placa).
Assim que o dispositivo OBD2 Bluetooth para inserido no conector do carro, siga os passos abaixo para ter controle da conectividade bluetooth:
sudo bluetoothctl
emparelável no agente na verificação do agente padrão emNeste momento, é importante que você copie o MAC Address pois certa para os próximos passos
Digite:
confiar em MACADDRESS
emparelhar MACADDRESS
Neste momento deve aparecer uma solicitação para digitar o PIN de pareamento do Bluetooth OBD2.
O PIN geralmente é 1234 ou 0000
Após a tela de sucesso de conexão, digitando este comando, você sai do programa controlador do Bluetooth digitando:
Sair
Agora é preciso fazer um "BIND" do dispositivo com uma porta serial:
sudo rfcomm bind 0 MACADDRESS 1
Para validar o sucesso da operação digite:
ls / dev
A porta “Rfcomm0 deve estar na lista.
Etapa 7: Ligando um DragonBoard 410c Ao OBD do Seu Carro Via Bluetooth - Passo 2/2
Objetivo passo é garantir o funcionamento da comunicação entre os dispositivos:
ELM327, DragonBoard 410c e Veículo
Baixe a aplicação “Screen” para enviar mensagens pela Porta Serial
sudo apt-get install tela
A Porta Serial será usada para envio e recebimento de Comandos AT entre DragonBoard 410c e o ELM327.
Para saber mais sobre Comandos AT, acesse:
ATENÇÃO:
Tome muito cuidado nesta parte! Todas as informações definidas para o dispositivo conectado ao carro, podem ser interpretadas e feitas ao carro de maneira errada e ocasionada ou mal-funcionamento do seu carro! Estude bastante os comandos antes de tentar inovar nos comandos. Recomendamos que siga as instruções abaixo detalhadamente.
Siga a sequência de comandos abaixo para dar início à comunicação:
-
Esta função irá abrir o terminal de comunicação serial.
tela / dev / rfcomm0
Assim que o terminal carregar, digite os comandos abaixo nesta sequência (e entenda o que cada um deles faz):
-
Reinicia o dispositivo. As vezes você precisa fazer isso.
ATZ
-
Liga a funcionalidade de quebra de linha nos comandos, facilitando a visualização.
ATL1
-
Liga os cabeçalhos dos comandos.
ATH1
-
Liga o espaçamento entre palavras.
ATS1
-
Defina o protocolo de comunicação do carro para “Automático”.
ATSP0
Teste de comunicação Final:
-
Digite no console:
ATI
- Ele deve retornar “ELM327 v1.5” ou uma versão do ELM do seu dispositivo.
- Isso prova que o ELM327 está comunicando com uma placa sem problemas, e podemos prosseguir.
Dica
Para sair da aplicação “Screen” é necessário apertar: Ctrl-A seguido de Ctrl-D
Etapa 8: Ligando um DragonBoard 410c Ao OBD Do Seu Carro Usando PyOBD
PyOBD é uma biblioteca de Python específica para comunicação com ou padrão OBD2 dos veículos. Com ela, podemos extrair diversas informações da rede de comunicação do carro, incluindo dados como velocidade e até mesmo erros da parte elétrica.
Para esta etapa, garantir que as seguintes bibliotecas instaladas no Linaro da DragonBoard 410c:
-
PIP - Gerenciador de módulos do Python
sudo apt-get install python-pip
-
SetupTools - gestor de arquivos de instalação
sudo pip install -U pip setuptools
-
Wheel - formatador de arquivos para instalação
sudo apt-get install python-wheel
-
OBD - biblioteca para interpretação de dados OBD
sudo apt-get python-obd
-
GPS - biblioteca com dados do gps
sudo pip instalar GPS
-
Solicitações - módulo de execução
pedidos de instalação sudo pip
Para saber se uma biblioteca de Python está funcionando corretamente, precisamos rodar os comandos:
sudo python
Neste momento o cursor do terminal vai mudar para este ícone “>>>” indicando que o programa está rodando Python. Podemos começar a digitar os comandos para serem interpretados conforme abaixo.
- Comece importando uma biblioteca
importar obd
-
Para fazer a conexão com a porta serial use o comando
conexão = obd. OBD (“/ dev / rfcomm0”)
-
Para descobrir se o Python está conseguindo extrair informações do carro, passando pelo Bluetooth, ELM327 até chegar no carro, digite:
connection.protocol_name ()
Etapa 9: Extraindo Informações Do Carro Usando Python
Vamos criar um arquivo chamado: OBD.py, conforme instruções abaixo e código na sequência.
Importamos a biblioteca OBD para dentro do Python para iniciar como utilizar.
Por motivos desconhecidos, a primeira conexão com nosso hardware, falha sempre. Na segunda tentativa, funciona sempre. Por isso, no código verá que há duas linhas de conexão (con).
Seguindo o funcionamento do código, com uma conexão feita, iniciamos um loop infinito que busca os dados do OBD, formata de acordo com os parâmetros definidos. Depois crie uma URL, utilizando Query String, para que possa enviar ao servidor utilizando o POST método.
No exemplo abaixo pegamos as seguintes informações:
- RPM
- Velocidade
- Odômetro *
As funções para captura dos dados utilizam dois parâmetros. Por exemplo, usando [1] [12] estamos buscando [módulo] [PID]. Esta lista pode ser encontrada em:
Por último, humm uma URL com todas as informações são concatenadas e adicionadas em um arquivo, chamado "obd_data.dat".
Código para OBD.py:
import obdimport timeodoInicial = -1 paramOdo = 0 #Conect OBDprint "Primeira conexao" con = obd. OBD ("/ dev / rfcomm0") print "Segunda conexao" con = obd. OBD ("/ dev / rfcomm0") enquanto True: respRPM = con.query (obd.commands [1] [12]) print respRPM respVelo = con.query (obd.commands [1] [13]) print respVelo respOdo = con.query (obd.commands [1] [49]) print respOdo paramRPM = int (float (str (respRPM).replace ("revolutions_per_minute", ""))) paramVelo = int (float (str (respVelo).replace ("kph", ""))) paramOdo = int (float (str (respOdo).replace ("kilometer", ""))) url = "https://www.website.com/OBD?vel="+str(paramVelo)+"&rpm="+str (paramRPM) + "& odo =" + str (paramOdo) + "\ n" time.sleep (0.2) print url file = open ("obd_data.dat", "a +") file.write (url) file.close () imprimir url
Depois da conexão e captura dos dados, vamos criar o arquivo chamado: envia_OBD.py
Esta parte do código fica mais simples. Começamos importando bibliotecas relacionadas à solicitação / envio de dados, usando RESTFUL.
Criamos um enquanto para enviar através de POST a URL da primeira linha do arquivo que populado anteriormente pelo OBD.py. Depois disso, para evitar que o dado seja enviado mais de uma vez, ela apaga esta linha do arquivo.
Código para o arquivo OBD.py:
pedidos de importação
import time while True: try: time.sleep (0.2) url = '' with open ('obd_data.dat', 'r') as fin: data = fin.read (). splitlines (True) url = data [0] request.post (url) com open ('obd_data.dat', 'w') como fout: fout.writelines (data [1:]) exceto: imprimir 'exceção'
Caso tenha algum problema copiando estes códigos, baixe os arquivos abaixo:
Etapa 10: Repetição De Scripts E Armazenamento De Dados Capturados Do Carro
Tudo o que foi feito até agora era orientado a garantir que um DragonBoard fizesse comunicação com os diferentes componentes da solução, como a comunicação 3G, WiFi, Bluetooth, Dados do GPS, entre outros.
Vamos usar o código abaixo para editar o arquivo 'rc.local', que já tem algumas funções e comandos pré-definidos, e fica no diretório '/ etc'. Para fazer a edição, use o comando:
sudo nano /etc/rc.local
Agora precisamos configurar a inicialização de todos os processos, serviços e funções, criando rotinas para que funcione automaticamente ao iniciar um Dragonboard. Vamos usar o BASH para fazer isso. O BASH (Bourne-Again-SHell) é um aplicativo para interpretação de comandos Unix.
No próximo código, que tem comandos BASH, você precisa inserir o MacAddress do seu dispositivo OBD / Bluetooth, e também precisa ter bastante cuidado para garantir que o código seja colocado sempre antes do comando "exit 0" que é a resposta de sucesso do sistema.
E se [! -f / etc / ssh / ssh_host_rsa_key]
then systemctl stop ssh.socket || true dpkg-reconfigure openssh-server fi sudo systemctl start qdsp-start.service rfcomm bind 0 MACADDRESS 1 sudo python /home/linaro/Documents/FadaDoCarro/conectaGPS.py & sudo python / home / linaro /Documents/FadaDoCarro/OBD.py & sudo python /home/linaro/Documents/FadaDoCarro/envia_OBD.py & saída 0
A partir de agora, sempre que uma placa para impressão, ela já vai se conectar através do 3G e enviar os dados de GPS e OBD para o servidor escolhido.
Etapa 11: Dificuldades benefícios
Listamos abaixo da barreira que encontramos ao longo do desenvolvimento do projeto, que resolvemos antes de criar este Instructable, mas que é importante alertá-lo, caso esteja tendo dificuldades também.
-
PyOBD
É preciso ter muito cuidado na hora de transmitir os dados e comunicar com ou carros. Na primeira instalação, quando a comunicação ainda não era estável com o dispositivo, enviamos alguns comandos para o carro, e acabamos causando algum problema na ECU. Neste momento o câmbio automático não aceitava mais mudanças, ficou travado. Além disso, as luzes do painel independente a piscar aleatoriamente. A solução para este evento que ocasionamos foi o desligamento dos cabos da bateria, mantendo assim por 15 minutos. Desta forma, forçamos o reset completo das ECUs do carro, retornando ele ao estágio original de fábrica, portanto cancelando qualquer comando que tenhamos enviado erroneamente pela porta OBD
-
Linaro
Tivemos um problema de boot no Linaro, quando aleatoriamente o OS reiniciava. Este problema foi resolvido ao longo do desenvolvimento do projeto, pela equipe do Linaro, que soltou uma atualização, e já construímos este tutorial utilizando uma informação mais atualizada
-
GPS na DragonBoard
A Qualcomm Dragonboard 410c não tem antenas GPS internas, e para melhor recepção de sinal, é preciso instalar o conector e adquirir uma antena externa. Para fazer este procedimento, siga os passos propostos pela própria Qualcomm:
Etapa 12: Referências
Bootloader
builds.96boards.org/releases/dragonboard410c/linaro/rescue/latest/
Linaro
builds.96boards.org/releases/dragonboard410c/linaro/debian/latest/
Como instalar o Linaro na DragonBoard 410c
www.embarcados.com.br/linux-linaro-alip-na-qualcomm-dragonboard-410c/
Documentação de GPS para DragonBoard
discuss.96boards.org/t/gps-software/170/16
Demonstração GPS
gist.github.com/wolfg1969/4653340
Python OBD
github.com/brendan-w/python-OBD
Conectando RaspberryPi à um OBD Bluetooth
gersic.com/connecting-your-raspberry-pi-to-a-bluetooth-obd-ii-adapter/
Instruções para criação do túnel SSH
gist.github.com/kr0no/63e34c77b02843b46a8d89d8f7b5e4b6
Instalando o SSH no Linux
ask.xmodulo.com/install-autossh-linux.html
Recomendado:
Como conectar e controlar uma lâmpada através do módulo ZigBee no Dragonboard: 5 etapas
Como conectar e controlar uma lâmpada através do módulo ZigBee no Dragonboard: Este instrutível ensina o usuário como conectar e instalar corretamente o módulo ZigBee no Dragonboard e interagir com uma lâmpada controlada ZigBee (OSRAM), formando uma rede IOT ZigBee.Requisitos : Dragonboard 410c; CC2531 Dongle USB; T
Códigos OBD II P0420 / P0430 Correção: 5 etapas
Códigos OBD II P0420 / P0430 Correção: Você tem essa luz irritante no painel do seu Mustang? Você mudou seu sistema de escapamento? Se você instalou um h-pipe off-road ou x-pipe (sem conversores catalíticos) ou removeu seus conversores catalíticos para uso em trilhos, seus sensores de oxigênio w
Vision 4all - Sistema Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android: 6 etapas
Vision 4all - Sistema Visão Assistida Para Deficientes Visuais Usando OpenCV, Dragonboard 410c E Aplicativo Android: DESCRI Ç Ã OO intuito do projeto é dar autonomia para deficientes visuais se locomoverem em ambientes internos como casas ou shopping centers e aeroportos.A locomo ç ã o em ambientes j á mapeados pode ou n ã o s
Detectando situações emergenciais - Qualcomm Dragonboard 410c: 7 etapas
Detectando Situações Emergenciais - Qualcomm Dragonboard 410c: Ao procurar sistemas de segurança que atuem no monitoramento de situações emergenciais, é possível perceber que é muito difícil processar todas as informações registradas. Pensando nisso, decidimos usar nosso conhecimento em processamento de áudio / imagem, sensores e
Modifique o cabo OBD-II para não descarregar a bateria do carro: 5 etapas
Modifique o cabo OBD-II para não descarregar a bateria do carro: Há muito tempo, todos os veículos estão equipados com uma porta de diagnóstico a bordo. Muitas vezes, essa porta está disponível como um conector OBD-II. Existem vários dispositivos que são capazes de se comunicar usando este conector, muitos deles são baseados em