亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

掌握 PSoC 6 Pioneer 开发板与 IoT 扩展盾:开发者指南

简介

PSoC 6 是 Cypress 强大 PSoC 系列处理器的最新成员。PSoC 6 Pioneer IoT 扩展盾是该处理器系列的配套开发工具,集成板载调试器、Arduino 兼容排针、CapSense 组件等,均连接至 PSoC 6 处理器。该处理器为双核架构,包含低功耗 Cortex-M0+ 与高性能 Cortex-M4 内核,通过共享外设与内存空间互联。

本教程将指导您上手 Pioneer 开发板,利用 Pioneer 扩展盾扩展 PSoC 6 能力。我们将演示如何通过 BLE 与 WiFi(使用 XBee WiFi 模块)与树莓派通信,以及 PSoC 4 BLE Pioneer 开发板与 PSoC 6 Pioneer 开发板间的 BLE 通信。

所需材料

本教程示例基于 PSoC 6 Pioneer 套件,可从 Cypress 或 Digi-Key 直接购买。

显然还需要 Pioneer 扩展盾。还需 XBee WiFi 模块。根据搭建情况有几种 XBee WiFi 选项:Trace、RP-SMA 接口配外置 2.4GHz 天线、或 Wire 天线版。最简便的是购买带导线天线的 XBee。

还需树莓派 3 入门套件。它将成为 PSoC 6 Pioneer 开发板的通信目标。当然也可单独购买 Pi 3 配面包板、跳线、电阻和 LED,但我们认为入门套件性价比极高,值得入手。

硬件概览

详细介绍 Pioneer Kit IoT 扩展板特性:

MicroSD 卡槽 – 该插槽引脚映射至大多数 Arduino 兼容板(含 PSoC 6 BLE Pioneer 板)的 SPI 外设。

XBee 排针 – 间距符合标准 XBee 封装,兼容所有官方 XBee 模块。

Qwiic 连接器 – 支持所有 SparkFun Qwiic 模块,供电 3.3V。

MicroB USB 电源接口 – 该接口数据线未连接任何信号。为 XBee 模块的 3.3V 稳压器提供 5V,覆盖来自 Arduino 排针的 5V,使高功耗 XBee 模块(如蜂窝、WiFi 或 Pro 型号)正常工作。

D7 与 D9 按键 – 两个用户按键分别连接至 D7、D9 引脚(PSoC 6 上对应 P0.2 和 P13.1,PSoC 4 BLE 上对应 P1.0 和 P0.4)。

3.3V 稳压器 – 开关模式 3.3V 稳压器,上游供电能力允许下最高可提供 1.5A。从 Arduino 引脚 5V 或 MicroB 电源接口取电。仅为 XBee 排针供电。

电平转换缓冲器 – 将 5V 信号降为 3.3V,使板卡兼容 3.3V 或 5V 系统。

I2C 电平转换电路 – 必要时将 I2C 信号从 3.3V 转为 5V。

电压选择跳线 – 选择 I2C 电平转换电路的目标电平。默认 3.3V。5V 系统使用时设为 5V。PSoC 4 和 PSoC 6 Pioneer BLE 均为 3.3V 系统。

XBee DIO5 LED – DIO5 默认具有实用功能,尤其在 WiFi 模块上,指示与配置 WiFi 网络的连接状态。

示例:PSoC 6 Pioneer Kit 通过 WiFi 与树莓派通信

本示例演示如何通过 WiFi 向树莓派发送信号。涵盖:访问 XBee WiFi 模块、PSoC 6 双核间进程通信、树莓派接收与解析命令。

跟随示例需一些准备,现逐步讲解。

PSoC 6 Pioneer Kit 硬件搭建

Pioneer Kit 侧极简:将 XBee WiFi 模块插入 Pioneer IoT 扩展盾,再将扩展盾插入 Pioneer Kit 板的 Arduino 排针。

树莓派侧需更多软硬件配置。

PSoC 6 Pioneer Kit 软件搭建

注意: PSoC 6 仅在 Creator 4.2 或更高版本受支持!

Pioneer Kit 软件项目托管于 GitHub。

PSOC 6 PIONEER KIT SOFTWARE DOWNLOAD

下载解压后,在 PSoC Creator 中打开示例(XBee_WiFi_Example)。

首先打开 “main_cm4.c” 并修改两处。您会看到类似代码段:
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;
显而易见,需修改为匹配您的网络设置。encrypt_mode 可为 WPA、WEP、WPA2 或(不推荐)NO_SECURITY。rpi_ip 为点分四段(如 “10.8.253.193”),可在树莓派命令窗口输入 “ifconfig” 查看 “wlan0” 部分获取。

编程开发板:通过随附 USB-A 转 USB-C 线连接 PC。点击工具栏 “Program” 按钮自动构建并烧录。

可能弹出窗口要求选择编程目标。在 “KitProg2” 列表项下任选一项均可正确烧录 flash。

树莓派硬件搭建

先看硬件连接:

如图,我们将 LED(串联 330 欧姆电阻)连接至树莓派引脚 3 (GPIO 2) 和 6 (GND)。这将允许切换 GPIO2 并在 LED 上观察结果。

树莓派软件搭建

假设您已搭建运行最新版 Raspbian(完整版而非 Lite)的树莓派,并连接键盘、鼠标、显示器及本地 WiFi。若非此情况,请花几分钟完成搭建。可参考我们的树莓派搭建教程。

从树莓派桌面开始。您应看到类似如下画面:

点击屏幕顶部的小图标(如下图)打开命令行。本教程后续假设命令行已打开。

将打开命令行窗口,可直接向树莓派发送执行命令。

首先执行安装 Flask 命令。Flask 是 Python Web 框架,能轻松构建运行后端 Python 脚本的 Web 前端。输入以下命令并回车:
sudo pip install flask
命令行将输出大量信息,结束时 Flask 已安装在树莓派上。

下一步从 GitHub 安装项目支持软件:
git clone https://github.com/sparkfun/Flask_Tutorial
命令行再次滚动输出,提示符返回表示安装完成。接着执行:
sudo python Flask_Tutorial/Python/app.py
这将启动应用并开始监听来自 Pioneer 板的 TCP/IP 输入。现在按下 IoT 扩展盾上的 D7 和 D9 按键即可控制树莓派连接的 LED 亮灭。很酷!

原理剖析 Part 1:Pioneer Kit 端

从 PSoC 6 软件项目的高层视角切入。查看左侧 Workspace Explorer 面板。我们将逐一讲解重要文件及其与整体项目的关联。

Workspace Explorer 看不清?点击图片放大查看。

项目顶层有六个条目:原理图(“TopDesign.sch”)、设计级资源(“XBee_WiFi_Example.cydwr”)、Cortex-M0+ 核心关联源文件(“CM0p (Core 0)”)、Cortex-M4 核心关联源文件(“CM4 (Core 1)”)、双核共享文件(“Shared Files”)及 IDE 生成的支持文件(“Generated_Source”)。

本项目原理图非常简单,包含几个 LED、开关及用于与 XBee WiFi 模块收发数据的 UART。LED 在当前实现中未使用。

我们跳过 .cydwr 文件内容。该文件包含原理图信号引脚分配、时钟生成及核心配置常量。感兴趣可自行深入,大多不言自明。

继续向下,到达 Cortex-M0+ 源文件。该子域顶层有五个条目:“Header Files”、“Source Files”及其他三个文件。我们只关注 “Header Files” 与 “Source Files” 子域,实际上仅关心其中的 “main_cm0p.c” 文件。这是运行在 Cortex-M0+ 处理器上的代码的 main() 入口。

正如工作区结构所暗示,两个内核运行完全独立的代码库。“main_cm0p.c” 是 Cortex-M0+ 核心代码入口,随后该核心启动 Cortex-M4 核心。Cortex-M4 侧存在结构相似的子域与文件,同样只需关注 “Header Files” 与 “Source Files” 子域。

最后是 “Shared Files” 部分。大多为自动生成,除 “ipc_common.c” 与 “ipc_common.h” 两个文件。这些是本项目开发的进程间通信辅助文件。

Cortex-M0+ 主文件

明确重要内容后,逐文件查看关键代码,先从 “main_cm0p.c” 开始。该文件处理 Cortex-M0+ 核心的所有活动:监控两个按键,按下时向 Cortex-M4 发送信号。

但这不像看起来那么简单,因为 Cortex-M4 处理完后需清除信号,意味着多进程访问同一数据。任何多进程操作同一数据集时,都须考虑写冲突影响。若一个进程在另一个进程修改同一数据过程中尝试修改,会发生什么?我们通过 “ipc_common” 文件建立的受保护读写机制解决此问题。

理解此机制先要懂 IPC 通道概念。IPC 通道利用信号量在进程间写数据,保证双核间无冲突。每个核心应用执行开始时,必须建立执行期间使用的 IPC 通道端点。考虑以下两行代码:
IPC_STRUCT_Type *D9IpcHandle;
D9IpcHandle = Cy_IPC_Drv_GetIpcBaseAddress(7);
第一行创建指针指向定义 IPC 通道特征的结构体。第二行将该结构体指向特定内存位置——系统 IPC 通道 7。我们使用通道 7 因通道 0-6 保留系统使用。

接着必须告知另一核心该 IPC 通道关联的内存地址。此函数调用完成此事:
while(Cy_IPC_Drv_SendMsgPtr(D9IpcHandle, CY_IPC_NO_NOTIFICATION, &D9Button) != CY_IPC_DRV_SUCCESS);
D9Button 为代码前部定义的变量。函数调用包裹在 while() 循环中,因我们要重复调用直到收到验证——另一进程(即运行在 Cortex-M4 核心上的代码)已接收此信息。我们也要等待变量锁释放,表明 Cortex-M4 读取指针值完毕。
while(Cy_IPC_Drv_IsLockAcquired(D9IpcHandle));
最后进入应用无限循环,自定义函数 ReadSharedVar() 与 WriteSharedVar() 处理更新与另一核心通信按键状态的共享变量。稍后深入剖析这些函数。

Cortex-M4 主文件

在 Cortex-M4 main() 函数中,我们重复 Cortex-M0+ main() 中的部分操作,建立 IPC 通道:
IPC_STRUCT_Type *D9IpcHandle;
D9IpcHandle = Cy_IPC_Drv_GetIpcBaseAddress(7);
完成后必须调用代码 “捕获” 从 Cortex-M0+ 进程发来的消息,包含待访问共享变量的地址。
while (Cy_IPC_Drv_ReadMsgPtr(D9IpcHandle, (void *)&D9Button) != CY_IPC_DRV_SUCCESS);
同样包裹在 while() 循环中,持续调用直到收到 Cortex-M0+ 发送的消息。随后必须释放该 IPC 通道锁,让 Cortex-M0+ 进程知晓可继续操作并将来复用该 IPC 通道。无需 while() 循环,因该调用只需发出一次即释放锁,而非反复检查锁是否释放。
Cy_IPC_Drv_LockRelease(D9IpcHandle, CY_IPC_NO_NOTIFICATION);
完成上述后,必须设置 XBee WiFi 扩展板接入本地网络。代码有详细文档,此处不再赘述。

在运行应用代码的无限循环中,再次调用自定义函数 ReadSharedVar() 与 WriteSharedVar() 访问与 Cortex-M0+ 核心共享的按键状态变量。让我们更近距离看看这些函数的作用。

Read More Info……

Using the PSoC 6 Pioneer Board with the Pioneer IoT Add-on Shield


制造工艺

  1. 气象站接入 CWOP 实战指南:公民天气观测计划
  2. 将 Acconeer A111 脉冲雷达与树莓派集成:实用指南
  3. IoT 与 MQTT 入门:免代码 ESP8266 教程
  4. Bridge Shield扩展板:树莓派与Arduino集成打造智能机器人
  5. 在树莓派 3 上扩展 GoPiGo v2 的 Windows 10 IoT Core 应用
  6. 释放IoT生态系统中视觉数据的力量
  7. 物联网革新现场服务:预测性维护驱动更高ROI
  8. 智慧城市如何利用物联网、微服务与仪表盘实现高效资产管理
  9. IoT World深度:Vertica大数据分析平台赋能物联网洞见
  10. 日立 Lumada 物联网平台:统一工业洞察赋能智能制造
  11. 企业级物联网:释放当前互联网 36 倍价值
  12. 固特异智能轮胎:物联网重塑出行服务新范式