Índice:

DragonBoard Com OBD: 12 etapas
DragonBoard Com OBD: 12 etapas

Vídeo: DragonBoard Com OBD: 12 etapas

Vídeo: DragonBoard Com OBD: 12 etapas
Vídeo: Im BADEMANTEL durch BADEN (AG) | VLOG² #60 Schweiz, Baden Aargau 2024, Julho
Anonim
DragonBoard Com OBD
DragonBoard Com OBD

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:

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

Fazendo O Setup Inicial Da DragonBoard 410c
Fazendo O Setup Inicial Da DragonBoard 410c
Fazendo O Setup Inicial Da DragonBoard 410c
Fazendo O Setup Inicial Da DragonBoard 410c
Fazendo O Setup Inicial Da DragonBoard 410c
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

Fazendo O GPS Da DragonBoard 410c Localizar Seu Dispositivo
Fazendo O GPS Da DragonBoard 410c Localizar Seu Dispositivo
Fazendo O GPS Da DragonBoard 410c Localizar Seu Dispositivo
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

Instalando O Dongle USB 3G / 4G
Instalando O Dongle USB 3G / 4G
Instalando O Dongle USB 3G / 4G
Instalando O Dongle USB 3G / 4G
Instalando O Dongle USB 3G / 4G
Instalando O Dongle USB 3G / 4G
Instalando O Dongle USB 3G / 4G
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

Transformando um DragonBoard 410c Em Hotspot / Access Point WiFi
Transformando um DragonBoard 410c Em Hotspot / Access Point WiFi
Transformando um DragonBoard 410c Em Hotspot / Access Point WiFi
Transformando um DragonBoard 410c Em Hotspot / Access Point WiFi
Transformando um DragonBoard 410c Em Hotspot / Access Point WiFi
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

Acessando um DragonBoard 410c Por SSH Sem Fio, Utilizando O Hotspot
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

Ligando um DragonBoard 410c Ao OBD do Seu Carro Via Bluetooth - Passo 1/2
Ligando um DragonBoard 410c Ao OBD do Seu Carro Via Bluetooth - Passo 1/2
Ligando um DragonBoard 410c Ao OBD do Seu Carro Via Bluetooth - Passo 1/2
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

Ligando um DragonBoard 410c Ao OBD Do Seu Carro Via Bluetooth - Passo 2/2
Ligando um DragonBoard 410c Ao OBD Do Seu Carro Via Bluetooth - Passo 2/2
Ligando um DragonBoard 410c Ao OBD Do Seu Carro Via Bluetooth - Passo 2/2
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

Ligando a DragonBoard 410c Ao OBD Do Seu Carro Usando PyOBD
Ligando a 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

Extraindo Informações Do Carro Usando Python
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

Repetição De Scripts E Armazenamento De Dados Capturados Do Carro
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

Dificuldades alívio
Dificuldades alívio

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

Referências
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: