Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Usando o PSoC 6 Pioneer Board com o Pioneer IoT Add-on Shield

Introdução


O PSoC 6 é a mais recente adição à poderosa série de processadores PSoC da Cypress. O PSoC 6 Pioneer IoT Add-On Shield é a ferramenta de desenvolvimento associada a esta linha de processadores, apresentando um depurador integrado, cabeçalhos compatíveis com Arduino, widgets CapSense e muito mais, todos vinculados a um processador PSoC 6. O processador é um dispositivo dual-core, com um processador Cortex-M0 + de baixa potência e um processador Cortex-M4 de alta potência unidos por meio de periféricos compartilhados e espaço de memória.





Este tutorial mostrará como começar a trabalhar com a Pioneer Board, usando o Pioneer Add-on Shield para expandir os recursos do dispositivo PSoC 6. Mostraremos como se comunicar com um Raspberry Pi via BLE e WiFi (usando um módulo XBee WiFi), bem como se comunicar entre um PSoC 4 BLE Pioneer Board e o PSoC 6 Pioneer Board via BLE.

Materiais necessários


Os exemplos neste tutorial devem ser usados ​​com o PSoC 6 Pioneer Kit, que pode ser adquirido diretamente na Cypress ou na Digi-Key.

Obviamente, você também precisará de um Escudo Adicional da Pioneer. Você também precisará de um Módulo WiFi XBee. Existem algumas opções de WiFi XBee dependendo da sua configuração:Trace, Conector RP-SMA com antena externa de 2,4 GHz ou Fio. O mais fácil seria conseguir o XBee com a antena de fio.

Você também precisará do Kit Inicial Raspberry Pi 3. Este se tornará seu alvo para comunicação do PSoC6 Pioneer Board. Você pode, é claro, comprar o Pi 3 separadamente junto com uma placa de ensaio, fios de jumper, resistores e LEDs, mas achamos que o kit inicial é um negócio excepcional e vale a pena comprar.


Visão geral do hardware


Vejamos os recursos do Pioneer Kit IoT Add-on Board em detalhes.

Slot para cartão MicroSD - Os pinos para este slot são mapeados para o periférico SPI na maioria das placas compatíveis com Arduino, incluindo a Placa Pioneer PSoC 6 BLE.



Cabeçalho XBee - Este cabeçalho é espaçado para aceitar a pegada XBee padrão. É compatível com todos os módulos oficiais do XBee.



Conector Qwiic - Este conector adiciona suporte para todos os módulos Qwiic do SparkFun. Ele fornece 3,3V.



Conector de alimentação USB MicroB - As linhas de dados neste conector não estão conectadas a nada. Ele fornece 5 V ao regulador de 3,3 V para o módulo XBee, substituindo os 5 V provenientes do conector Arduino e permitindo que os módulos XBee de alta potência (como os modelos de celular, wi-fi ou Pro) funcionem corretamente.



Botões D7 e D9 - Dois botões de usuário ligados aos pinos D7 e D9 (P0.2 e P13.1 no PSoC 6, ou P1.0 e P0.4 no PSoC 4 BLE).



Regulador de 3,3 V - Alternar regulador de energia de 3,3 V com capacidade de alimentação de até 1,5 A, dependendo da capacidade de fornecimento de alimentação a montante. Consome energia de uma fonte de 5 V nos pinos do Arduino ou no conector de alimentação MicroB. Fornece energia apenas para o conector XBee.



Level Shift Buffer - Down converte de sinais de 5V para sinais de 3,3V. Permite que a placa seja usada em sistemas de 3,3V ou 5V.



Circuito de mudança de nível I2C - Converte sinais I2C de 3,3 V para 5 V, se necessário.



Jumper de seleção de alimentação de tensão - Seleciona o nível para o qual o circuito de mudança de nível I2C é traduzido. Padrão definido para 3,3 V . Defina para 5 V para uso com sistemas de 5 V. Ambas as placas PSoC 4 e PSoC 6 Pioneer BLE são 3,3 V sistemas.



LED XBee DIO5 - O padrão DIO5 é algumas funções úteis, especialmente no módulo WiFi, onde mostra a conectividade com a rede WiFi configurada.




Exemplo:WiFi para Raspberry Pi usando o PSoC 6 Pioneer Kit


Este exemplo demonstra como enviar um sinal para um Raspberry Pi via WiFi. Ele mostrará como acessar um módulo XBee WiFi, comunicação entre processos entre os dois núcleos do PSoC 6 e como receber e analisar comandos com um Raspberry Pi.

Seguir este exemplo exigirá alguma configuração, então vamos examinar isso agora.

Configuração do kit Pioneer PSoC 6:Hardware


A configuração do lado do Pioneer Kit é trivial:insira o módulo XBee WiFi no Pioneer IoT Add-on Shield e insira o escudo no conector Arduino da Pioneer Kit Board.

O lado do Raspberry Pi requer mais explicações. Você precisará configurar algum hardware e software no Raspberry Pi.

Configuração do kit Pioneer PSoC 6:Software

Nota: O suporte para PSoC 6 está disponível apenas no Creator 4.2 ou posterior!
O projeto de software do Pioneer Kit está disponível no GitHub.

DOWNLOAD DO SOFTWARE DO PSOC 6 PIONEER KIT

Depois de fazer o download e extrair o arquivo em algum lugar, você pode abrir o exemplo (XBee_WiFi_Example) no PSoC Creator.

Antes de qualquer coisa, você precisa abrir o “ main_cm4.c ”E faça algumas alterações. Você encontrará uma seção de código semelhante a:
char ssid [] =“your_ssid_here”;
char rpi_ip [] =“raspi_ip_here”;
char ssid_pw [] =“wifi_pw_here ”;
int dest_port =5000;
char encrypt_mode =WPA2;
Esperançosamente, é óbvio o que você precisa fazer:alterar essas configurações para corresponder à configuração de sua rede. O valor encrypt_mode pode ser WPA, WEP, WPA2 ou (espero que não!) NO_SECURITY. rpi_ip é um quad pontilhado (por exemplo, “10.8.253.193”) que você pode obter digitando “ ifconfig ”Em uma janela de comando em seu Raspberry Pi (veja abaixo para obter instruções sobre como abrir uma janela de comando) e olhando para o“ wlan0 " seção.

Para programar a placa, conecte-a ao PC por meio do cabo USB-A para USB-C incluso. Em seguida, clique no botão “Programa” da barra de ferramentas (conforme mostrado abaixo) para construir automaticamente o projeto e programar o quadro.





Você pode obter uma janela como a abaixo solicitando que você escolha um alvo para programar. Não importa qual entrada você escolher no item da lista “KitProg2”, qualquer um deles programará o flash corretamente.




Configuração do Raspberry Pi:Hardware


Primeiro, vamos ver como o hardware está conectado:





Como você pode ver, conectamos um LED (com resistor de 330 ohms) aos pinos 3 (GPIO 2) e 6 (terra) do Raspberry Pi. Isso nos permitirá alternar GPIO2 e ver o resultado no LED.

Configuração do Raspberry Pi:Software


Vamos supor que você tenha um Raspberry Pi configurado com a versão mais recente do Raspbian (a instalação completa, não a versão lite) em execução e que esteja conectado a um teclado, mouse, monitor e rede WiFi local. Se este for não o caso, reserve alguns minutos para configurá-lo. Você pode revisar nosso tutorial sobre como configurar o Pi aqui.

Vamos começar pela área de trabalho do Raspberry Pi. Você deve ter uma tela parecida com esta:





Você precisará clicar no pequeno logotipo na parte superior da tela (mostrado abaixo) para abrir uma linha de comando. O restante deste tutorial presumirá que você tem essa linha de comando aberta.





Isso abrirá uma janela de linha de comando. Isso permite que você diga ao Raspberry Pi para executar comandos diretamente.





Começaremos executando o comando para instalar o Flask. Flask é uma estrutura da web para Python que permite fazer um front-end da web que executa scripts Python no back-end do servidor de maneira bastante trivial. Digite o seguinte comando e pressione “Enter”.
sudo pip install flask
Um monte de coisas acontecerá na janela da linha de comando e ao final dela, o Flask será instalado no seu Raspberry Pi.

A próxima etapa é instalar o software que escrevemos para oferecer suporte a este projeto do GitHub. O comando para fazer isso é
git clone https://github.com/sparkfun/Flask_Tutorial
Novamente, você verá algum texto rolar na linha de comando e, quando o prompt retornar, isso vai ser sua indicação de que o processo de instalação foi concluído. Depois de concluído, digite este comando:
sudo python Flask_Tutorial / Python / app.py
Isso iniciará o aplicativo e começará a ouvir a entrada sobre TCP / IP da placa Pioneer. Agora você deve conseguir ligar e desligar o LED conectado ao Raspberry Pi pressionando os botões D7 e D9 no IoT Shield. Arrumado!

Então, o que está acontecendo aqui? Pt. 1:O Kit Pioneer


Vamos dar uma olhada no que exatamente está acontecendo, começando por uma visão de alto nível do projeto de software PSoC 6. Observe o quadro do Workspace Explorer no lado esquerdo da tela. Percorreremos esse quadro, destacando os arquivos importantes e como eles se relacionam com o projeto geral.





Está tendo dificuldade em ver o Workspace Explorer? Clique na imagem para ver mais de perto.

O nível superior do projeto tem seis entradas:o esquema (“ TopDesign.sch ”), O Design Wide Resources (“ XBee_WiFi_Example.cydwr ”), Os arquivos de origem associados ao núcleo Cortex-M0 + (“ CM0p (Core 0) ”), Os arquivos de origem associados ao núcleo Cortex-M4 (“ CM4 (Core 1) ”), Arquivos a serem compartilhados entre os dois (“ Arquivos compartilhados ”), E arquivos de suporte gerados pelo IDE (“ Generated_Source ”).

O esquema para este projeto é muito simples, tendo alguns LEDs, alguns interruptores e o UART usado para transferir dados de e para o módulo WiFi XBee. Na verdade, os LEDs não são usados ​​na implementação atual do projeto.





Vamos pular o conteúdo do .cydwr Arquivo. Este arquivo contém as atribuições de pinos para os sinais usados ​​no esquema, a geração de relógio e constantes de configuração do núcleo. Se você quiser investigar mais, sinta-se à vontade para se aprofundar um pouco. Muito disso deve ser autoexplicativo.

Descendo a lista, chegamos aos nossos arquivos de origem Cortex-M0 +. Você notará que o nível superior neste subdomínio tem cinco entradas:“Arquivos de cabeçalho”, “Arquivos de origem” e três outros arquivos. Precisamos apenas nos preocupar com o conteúdo dos subdomínios “Arquivos de cabeçalho” e “Arquivos de origem” e, de fato, apenas com um arquivo nesses:o “ main_cm0p.c " Arquivo. É aqui que reside a função main () para o código executado no processador Cortex-M0 +.





Como você deve ter adivinhado pela estrutura do espaço de trabalho, existem duas bases de código totalmente separadas em execução para os dois núcleos diferentes. “ main_cm0p.c ”É o ponto de entrada para o código do núcleo Cortex-M0 +, e então esse núcleo inicia o núcleo Cortex-M4. Existe um subdomínio semelhante para o núcleo do Cortex-M4 com arquivos semelhantes e, novamente, só precisamos nos preocupar com os subdomínios “Arquivos de cabeçalho” e “Arquivos de origem”.





Finalmente, temos a seção “Arquivos compartilhados”. A maioria desses arquivos são gerados automaticamente, salve o “ ipc_common.c ”E“ ipc_common.h " arquivos. Esses arquivos são auxiliares para a comunicação entre processos desenvolvidos para este projeto.




O arquivo principal do Cortex-M0 +


Agora que destacamos o conteúdo importante, vamos dar uma olhada nas partes importantes do código, um arquivo por vez, começando com o “ main_cm0p.c " Arquivo. Este arquivo controla toda a atividade que o núcleo Cortex-M0 + faz para o sistema:monitorar os dois botões e enviar um sinal ao Cortex-M4 quando um ou outro é pressionado.

No entanto, isso não é tão simples quanto parece, já que o Cortex-M4 precisa ser capaz de limpar o sinal depois de lidar com ele, e isso significa vários processos acessando os mesmos dados. Sempre que houver vários processos trabalhando no mesmo conjunto de dados, você precisará considerar os efeitos de uma colisão de gravação. O que acontece se um processo tentar alterar os dados no meio do outro processo tentando alterar os mesmos dados? Para lidar com isso, usamos um sistema de leitura e gravação protegida, configurada no “ ipc_common " arquivos.

Para entender como isso funciona, é preciso primeiro entender o conceito de canal IPC. Os canais IPC usam semáforos para gravar dados de um processo para outro, garantindo que não haverá colisão entre os dois núcleos. No início da execução do aplicativo para cada núcleo, você deve estabelecer pontos de extremidade para os canais IPC a serem usados ​​durante a execução. Considere estas duas linhas de código:
IPC_STRUCT_Type * D9IpcHandle;
D9IpcHandle =Cy_IPC_Drv_GetIpcBaseAddress (7);
A primeira cria um ponteiro para uma estrutura que define as características de um canal IPC. O segundo realmente configura essa estrutura para apontar para um local de memória específico, aquele do sistema IPC, canal 7. Usamos o canal 7 porque os canais 0-6 são reservados para uso do sistema.

Em seguida, devemos, é claro, informar ao outro núcleo qual endereço de memória está associado a este canal IPC. Isso é o que esta chamada de função faz.
while (Cy_IPC_Drv_SendMsgPtr (D9IpcHandle, CY_IPC_NO_NOTIFICATION, &D9Button)! =CY_IPC_DRV_SUCCESS);
D9Button é uma variável configurada anteriormente no código. A chamada de função está incluída em um loop while () porque queremos repetir a chamada de função até recebermos a verificação de que o outro processo (ou seja, o código em execução no núcleo Cortex-M4) recebeu essa informação. Também queremos esperar até que o bloqueio da variável seja liberado, indicando que o Cortex-M4 terminou de ler o valor do ponteiro.
while (Cy_IPC_Drv_IsLockAcquired (D9IpcHandle));
Finalmente, caímos em nosso infinito loop para o aplicativo, onde as funções customizadas ReadSharedVar () e WriteSharedVar () tratam da atualização das variáveis ​​compartilhadas que comunicam o status do botão com o outro núcleo. Vamos nos aprofundar nessas funções mais tarde.

O arquivo principal do Cortex-M4


Na função Cortex-M4 main (), repetimos algumas das mesmas operações que fizemos na função Cortex-M0 + main () em relação à configuração do canal IPC.
IPC_STRUCT_Type * D9IpcHandle;
D9IpcHandle =Cy_IPC_Drv_GetIpcBaseAddress (7);
Feito isso devemos então chamar algum código para “pegar” a mensagem que foi enviada do processo Cortex-M0 +, contendo o endereço da variável compartilhada a ser acessada.
while (Cy_IPC_Drv_ReadMsgPtr (D9IpcHandle, (void *) &D9Button)! =CY_IPC_DRV_SUCCESS);
Novamente, incluímos esta chamada em um loop while () para que seja continuamente chamada até que a mensagem seja enviada do Cortex-M0 +. Em seguida, devemos liberar o bloqueio nesse canal IPC para que o processo Cortex-M0 + saiba que pode continuar a operação e usar o canal IPC no futuro. Não há necessidade de incluir isso em um loop while () porque é aberto:a chamada só precisa ser emitida uma vez para liberar o bloqueio, em vez de verificar se o bloqueio foi liberado, o que deve ser repetido até o momento em que o o bloqueio é liberado.
Cy_IPC_Drv_LockRelease (D9IpcHandle, CY_IPC_NO_NOTIFICATION);
Uma vez que tudo isso tenha sido concluído, devemos configurar o escudo XBee WiFi para acessar nossa rede local. Não duplicaremos todo esse código aqui, como está bem documentado no exemplo.

No loop infinito que executa o código do aplicativo, chamamos novamente as funções personalizadas ReadSharedVar () e WriteSharedVar () para acessar as variáveis ​​que mantêm o status do botão, que são compartilhadas com o núcleo Cortex-M0 +. Vamos dar uma olhada mais de perto no que essas funções fazem.

Leia mais informações ……

Usando o PSoC 6 Pioneer Board com o Pioneer IoT Add-on Shield


Processo de manufatura

  1. Junte-se ao IOT com sua estação meteorológica - CWOP
  2. Usando o sensor de radar pulsado A111 com um Raspberry Pi
  3. Fácil início no mundo da IoT com MQTT
  4. Robô usando Raspberry Pi e Bridge Shield
  5. GoPiGo v2 com Windows IoT
  6. O potencial para integrar dados visuais com a IoT
  7. Na estrada com IoT
  8. Os segredos de uma infraestrutura IoT com uma cidade inteligente
  9. Mundo IoT:Um dia na vida com a Vertica
  10. Com as ofertas da plataforma Lumada IoT, a Hitachi conecta os pontos