Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Uso de la placa Pioneer de PSoC 6 con el escudo complementario de Pioneer IoT

Introducción

El PSoC 6 es la última incorporación a la potente serie de procesadores PSoC de Cypress. PSoC 6 Pioneer IoT Add-On Shield es la herramienta de desarrollo asociada con esta línea de procesadores, con un depurador integrado, encabezados compatibles con Arduino, widgets CapSense y más, todo vinculado a un procesador PSoC 6. El procesador es un dispositivo de doble núcleo, con un procesador de baja potencia Cortex-M0 + y un procesador de alta potencia Cortex-M4 unidos a través de periféricos compartidos y espacio de memoria.

Este tutorial le mostrará cómo poner en marcha la Pioneer Board, utilizando el Pioneer Add-on Shield para ampliar las capacidades del dispositivo PSoC 6. Le mostraremos cómo comunicarse con una Raspberry Pi a través de BLE y WiFi (usando un módulo XBee WiFi), así como también cómo comunicarse entre una placa Pioneer PSoC 4 BLE y la placa Pioneer PSoC 6 a través de BLE.

Materiales necesarios

Los ejemplos de este tutorial están pensados ​​para su uso con el kit Pioneer de PSoC 6, que se puede comprar directamente en Cypress o en Digi-Key.

Obviamente, también necesitará un escudo complementario de Pioneer. También necesitará un módulo WiFi XBee. Hay algunas opciones de XBee WiFi dependiendo de su configuración:Trace, RP-SMA Connector con antena externa de 2.4GHz o Wire. Lo más fácil sería obtener XBee con la antena de cable.

También necesitará el kit de inicio Raspberry Pi 3. Este se convertirá en su objetivo de comunicación desde la placa Pioneer de PSoC6. Por supuesto, puede comprar el Pi 3 por separado junto con una placa de pruebas, cables de puente, resistencias y LED, pero creemos que el kit de inicio es un trato excepcional y vale la pena conseguirlo.

Descripción general del hardware

Repasemos en detalle las características de la placa complementaria de IoT de Pioneer Kit.

Ranura para tarjeta microSD - Los pines para esta ranura se asignan al periférico SPI en la mayoría de las placas compatibles con Arduino, incluida la placa Pioneer PSoC 6 BLE.

Encabezado XBee - Este encabezado está espaciado para aceptar la huella estándar de XBee. Es compatible con todos los módulos oficiales de XBee.

Conector Qwiic - Este conector agrega soporte para todos los módulos Qwiic de SparkFun. Suministra 3.3V.

Conector de alimentación USB MicroB - Las líneas de datos de este conector no están conectadas a nada. Proporciona 5V al regulador de 3.3V para el módulo XBee, anulando los 5V provenientes del encabezado Arduino y permitiendo que los módulos XBee de alta potencia (como los modelos celular, wifi o Pro) funcionen correctamente.

Botones D7 y D9 - Dos botones de usuario conectados a los pines D7 y D9 (P0.2 y P13.1 en el PSoC 6, o P1.0 y P0.4 en el PSoC 4 BLE).

Regulador de 3,3 V - Regulador de potencia de 3,3 V en modo de conmutación capaz de generar hasta 1,5 A, dependiendo de la capacidad de suministro de suministro ascendente. Obtiene energía de la fuente de 5 V en los pines Arduino o el conector de alimentación MicroB. Suministra energía solo al cabezal XBee.

Búfer de cambio de nivel - Conversión descendente de señales de 5V a señales de 3.3V. Permite que la placa se use en sistemas de 3.3V o 5V.

Circuito de cambio de nivel I2C - Convierte señales I2C de 3.3V a 5V, si es necesario.

Puente de selección de suministro de voltaje - Selecciona el nivel al que se traduce el circuito de cambio de nivel I2C. Establecido de forma predeterminada en 3,3 V . Configure en 5V para usar con sistemas de 5V. Tanto las placas Pioneer BLE PSoC 4 como PSoC 6 son 3.3V sistemas.

LED XBee DIO5 - DIO5 tiene por defecto algunas funciones útiles, especialmente en el módulo WiFi, donde muestra conectividad a la red WiFi configurada.

Ejemplo:WiFi a Raspberry Pi con el kit PSoC 6 Pioneer

Este ejemplo demuestra cómo enviar una señal a una Raspberry Pi a través de WiFi. Le mostrará cómo acceder a un módulo WiFi XBee, la comunicación entre procesos entre los dos núcleos del PSoC 6 y cómo recibir y analizar comandos con una Raspberry Pi.

Seguir este ejemplo requerirá alguna configuración, así que repasemos eso ahora.

Configuración del kit Pioneer de PSoC 6:hardware

La configuración lateral del Pioneer Kit es trivial:inserte el módulo XBee WiFi en el Pioneer IoT Add-on Shield e inserte el protector en el encabezado Arduino de la Pioneer Kit Board.

El lado de Raspberry Pi requiere más explicación. Deberá configurar tanto hardware como software en la Raspberry Pi.

Configuración del kit Pioneer de PSoC 6:software

Nota: La compatibilidad con PSoC 6 solo está disponible en Creator 4.2 o posterior.

El proyecto de software del Pioneer Kit está disponible en GitHub.

DESCARGA DE SOFTWARE PSOC 6 PIONEER KIT

Una vez que haya descargado y extraído el archivo en algún lugar, puede abrir el ejemplo (XBee_WiFi_Example) en PSoC Creator.

Antes de hacer cualquier otra cosa, debe abrir el archivo " main_cm4.c ”Y realice un par de cambios. Encontrará una sección de código que se parece a esto:
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;
Con suerte, es obvio lo que debe hacer:cambie esta configuración para que coincida con la configuración de su red. El valor de encrypt_mode puede ser WPA, WEP, WPA2 o (¡con suerte no!) NO_SECURITY. rpi_ip es un cuadrante de puntos (p. ej., "10.8.253.193") que puede obtener escribiendo " ifconfig "En una ventana de comando en su Raspberry Pi (consulte a continuación las instrucciones sobre cómo abrir una ventana de comando) y mirando el" wlan0 "Sección.

Para programar la placa, conéctela a su PC mediante el cable USB-A a USB-C incluido. Luego, haga clic en el botón "Programa" en la barra de herramientas (como se muestra a continuación) para construir automáticamente el proyecto y programar el tablero.

Es posible que aparezca una ventana como la siguiente que le pide que elija un objetivo para programar. No importa qué entrada elija en el elemento de la lista "KitProg2", cualquiera de las dos programará el flash correctamente.

Configuración de Raspberry Pi:hardware

Primero, veamos cómo está conectado el hardware:

Como puede ver, hemos conectado un LED (con resistencia de 330 ohmios) a los pines 3 (GPIO 2) y 6 (tierra) de la Raspberry Pi. Esto nos permitirá alternar GPIO2 y ver el resultado en el LED.

Configuración de Raspberry Pi:software

Vamos a suponer que tiene una Raspberry Pi configurada con la última versión de Raspbian (la instalación completa, no la versión lite) en ejecución y que está conectada a un teclado, mouse, monitor y red WiFi local. Si esto es no el caso, tómese unos minutos para configurarlo. Puede revisar nuestro tutorial sobre cómo configurar la Pi aquí.

Comencemos desde el escritorio de la Raspberry Pi. Debería tener una pantalla que se parezca a esto:

Deberá hacer clic en el pequeño logotipo en la parte superior de la pantalla (que se muestra a continuación) para abrir una línea de comando. El resto de este tutorial asumirá que tiene esa línea de comando abierta.

Eso abrirá una ventana de línea de comando. Esto le permite decirle a Raspberry Pi que ejecute comandos directamente.

Comenzaremos ejecutando el comando para instalar Flask. Flask es un marco web para Python que le permite crear una interfaz web que ejecute scripts de Python en el backend del servidor de manera bastante trivial. Escribe el siguiente comando, luego presiona "Enter".
sudo pip install flask
Un montón de cosas sucederán en la ventana de línea de comando y al final, Flask se instalará en tu Raspberry Pi.

El siguiente paso es instalar el software que hemos escrito para respaldar este proyecto desde GitHub. El comando para hacer eso es
git clone https://github.com/sparkfun/Flask_Tutorial
Nuevamente, verá un poco de texto desplazarse por la línea de comando, y cuando el indicador regrese, eso sea ​​su indicación de que el proceso de instalación se ha completado. Una vez que esté completo, ingrese este comando:
sudo python Flask_Tutorial / Python / app.py
Eso iniciará la aplicación y comenzará a escuchar la entrada a través de TCP / IP desde la placa Pioneer. Ahora debería poder encender y apagar el LED conectado a la Raspberry Pi presionando los botones D7 y D9 en el Escudo de IoT. ¡Genial!

Entonces, ¿qué está pasando aquí? Pt. 1:El kit Pioneer

Echemos un vistazo a lo que está sucediendo exactamente, comenzando desde una vista de alto nivel del proyecto de software PSoC 6. Mire el marco del Explorador del espacio de trabajo en el lado izquierdo de la pantalla. Analizaremos ese marco, destacando los archivos de importancia y cómo se relacionan con el proyecto en general.

¿Tiene dificultades para ver el Explorador del espacio de trabajo? Haga clic en la imagen para verla más de cerca.

El nivel superior del proyecto tiene seis entradas:el esquema (" TopDesign.sch ”), Los recursos de diseño amplio (“ XBee_WiFi_Example.cydwr "), Los archivos fuente asociados con el núcleo Cortex-M0 + (" CM0p (Core 0) "), Los archivos fuente asociados con el núcleo Cortex-M4 (" CM4 (Core 1) "), Archivos que se compartirán entre los dos (" Archivos compartidos ”) Y archivos de soporte generados por el IDE (“ Generated_Source ”).

El esquema de este proyecto es muy simple, tiene un par de LED, un par de interruptores y el UART utilizado para transferir datos hacia y desde el módulo WiFi XBee. En realidad, los LED no se utilizan en la implementación actual del proyecto.

Vamos a omitir el contenido del .cydwr Archivo. Este archivo contiene las asignaciones de pines para las señales utilizadas en el esquema, la generación de reloj y las constantes de configuración del núcleo. Si desea investigarlo más, no dude en indagar un poco más. Gran parte debe ser autoexplicativo.

Avanzando en la lista, llegamos a nuestros archivos fuente Cortex-M0 +. Observará que el nivel superior de este subdominio tiene cinco entradas:"Archivos de encabezado", "Archivos de origen" y otros tres archivos. Solo debemos preocuparnos por el contenido de los subdominios "Archivos de encabezado" y "Archivos de origen", y de hecho, solo con un archivo en ellos:el " main_cm0p.c " Archivo. Aquí es donde vive la función main () para el código que se ejecuta en el procesador Cortex-M0 +.

Como habrá adivinado por la estructura del espacio de trabajo, hay dos bases de código completamente separadas que se ejecutan para los dos núcleos diferentes. " main_cm0p.c "Es el punto de entrada para el código del núcleo Cortex-M0 +, y luego ese núcleo inicia el núcleo Cortex-M4. Existe un subdominio similar para el núcleo Cortex-M4 con archivos similares y, nuevamente, solo debemos preocuparnos por los subdominios "Archivos de encabezado" y "Archivos de origen".

Finalmente, tenemos la sección “Archivos compartidos”. La mayoría de estos archivos se generan automáticamente, guarde el archivo " ipc_common.c ”Y“ ipc_common.h ”Archivos. Estos archivos son ayudantes para la comunicación entre procesos desarrollados para este proyecto.

El archivo principal Cortex-M0 +

Ahora que hemos resaltado los contenidos importantes, echemos un vistazo a las partes importantes del código, un archivo a la vez, comenzando con " main_cm0p.c " Archivo. Este archivo maneja toda la actividad que el núcleo Cortex-M0 + hace para el sistema:monitorear los dos botones y enviar una señal al Cortex-M4 cuando se presiona uno u otro.

Sin embargo, esto no es tan sencillo como parece, ya que el Cortex-M4 necesita poder borrar la señal una vez que la ha manejado, y eso significa que múltiples procesos acceden a los mismos datos. Siempre que tenga varios procesos trabajando en el mismo conjunto de datos, debe considerar los efectos de una colisión de escritura. ¿Qué sucede si un proceso intenta cambiar los datos en medio del otro proceso que intenta cambiar los mismos datos? Para hacer frente a esto, utilizamos un sistema de lectura y escritura protegido, configurado en el " ipc_common "Archivos.

Para comprender cómo funciona esto, primero se debe comprender el concepto de canal IPC. Los canales de IPC usan semáforos para escribir datos de un proceso a otro mientras garantizan que no habrá colisión entre los dos núcleos. Al comienzo de la ejecución de la aplicación para cada núcleo, debe establecer puntos finales para los canales IPC que se utilizarán durante la ejecución. Considere estas dos líneas de código:
IPC_STRUCT_Type * D9IpcHandle;
D9IpcHandle =Cy_IPC_Drv_GetIpcBaseAddress (7);
La primera crea un puntero para una estructura que define las características de un canal IPC. El segundo realmente establece esa estructura para que apunte a una ubicación de memoria específica, la del canal IPC del sistema 7. Usamos el canal 7 porque los canales 0-6 están reservados para uso del sistema.

A continuación, por supuesto, debemos decirle al otro núcleo qué dirección de memoria está asociada con este canal IPC. Eso es lo que hace esta llamada de función.
while (Cy_IPC_Drv_SendMsgPtr (D9IpcHandle, CY_IPC_NO_NOTIFICATION, &D9Button)! =CY_IPC_DRV_SUCCESS);
D9Button es una variable configurada anteriormente en el código. La llamada a la función está encerrada en un bucle while () porque queremos repetir la llamada a la función hasta que recibamos la verificación de que el otro proceso (es decir, el código que se ejecuta en el núcleo Cortex-M4) ha recibido esta información. También queremos esperar hasta que se libere el bloqueo de la variable, lo que indica que Cortex-M4 ha terminado de leer el valor del puntero.
while (Cy_IPC_Drv_IsLockAcquired (D9IpcHandle));
Finalmente, ingresamos a nuestro infinito bucle para la aplicación, donde las funciones personalizadas ReadSharedVar () y WriteSharedVar () manejan la actualización de las variables compartidas que comunican el estado del botón con el otro núcleo. Profundizaremos en esas funciones más adelante.

El archivo principal de Cortex-M4

En la función Cortex-M4 main (), repetimos algunas de las mismas operaciones que hicimos en la función Cortex-M0 + main () con respecto a la configuración del canal IPC.
IPC_STRUCT_Type * D9IpcHandle;
D9IpcHandle =Cy_IPC_Drv_GetIpcBaseAddress (7);
Una vez completado, debemos llamar a un código para "capturar" el mensaje que se envió desde el proceso Cortex-M0 +, que contiene la dirección de la variable compartida a la que se accede.
while (Cy_IPC_Drv_ReadMsgPtr (D9IpcHandle, (void *) &D9Button)! =CY_IPC_DRV_SUCCESS);
De nuevo, incluimos esta llamada en un bucle while () para que se llame continuamente hasta que se envíe el mensaje desde el Corteza-M0 +. Luego debemos liberar el bloqueo en ese canal de IPC para que el proceso Cortex-M0 + sepa que puede continuar funcionando y usar el canal de IPC en el futuro. No es necesario encerrar esto en un bucle while () porque tiene un final abierto:la llamada solo debe emitirse una vez para liberar el bloqueo, en lugar de verificar que el bloqueo se haya liberado, lo que debe repetirse hasta el momento en que se libera el bloqueo.
Cy_IPC_Drv_LockRelease (D9IpcHandle, CY_IPC_NO_NOTIFICATION);
Una vez que todo esto se ha completado, debemos configurar el escudo XBee WiFi para acceder a nuestra red local. No duplicaremos todo ese código aquí, ya que está bien documentado en el ejemplo.

En el bucle infinito que ejecuta el código de la aplicación, nuevamente llamamos a las funciones personalizadas ReadSharedVar () y WriteSharedVar () para acceder a las variables que contienen el estado del botón, que se comparten con el núcleo Cortex-M0 +. Echemos un vistazo más de cerca a lo que hacen estas funciones.

Leer más información ……

Uso de la placa Pioneer de PSoC 6 con el escudo complementario de IoT de Pioneer


Proceso de manufactura

  1. Únase al IOT con su estación meteorológica - CWOP
  2. Uso del sensor de radar pulsado A111 con una Raspberry Pi
  3. Inicio fácil en el mundo de IoT con MQTT
  4. Robot que usa Raspberry Pi y Bridge Shield
  5. GoPiGo v2 con Windows IoT
  6. El potencial para integrar datos visuales con IoT
  7. En la carretera con IoT
  8. Los secretos de una infraestructura de IoT con una ciudad inteligente
  9. IoT World:Un día en la vida con Vertica
  10. Con las ofertas de la plataforma IoT de Lumada, Hitachi conecta los puntos
  11. Con Enterprise IoT, lo mejor está por venir