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

使用 PSoC 6 Pioneer Board 和 Pioneer IoT Add-on Shield

简介

PSoC 6 是赛普拉斯强大的 PSoC 系列处理器的最新成员。 PSoC 6 Pioneer IoT Add-On Shield 是与该处理器系列相关的开发工具,带有板载调试器、Arduino 兼容接头、CapSense 小部件等,所有这些都与 PSoC 6 处理器相关联。该处理器为双核设备,Cortex-M0+ 低功耗处理器和 Cortex-M4 高功耗处理器通过共享外设和内存空间连接在一起。

本教程将向您展示如何启动和运行 Pioneer Board,使用 Pioneer Add-on Shield 扩展 PSoC 6 器件的功能。我们将向您展示如何通过 BLE 和 WiFi(使用 XBee WiFi 模块)与 Raspberry Pi 通信,以及如何通过 BLE 在 PSoC 4 BLE Pioneer 板和 PSoC 6 Pioneer 板之间进行通信。

所需材料

本教程中的示例适用于 PSoC 6 Pioneer 套件,该套件可直接从赛普拉斯或 Digi-Key 购买。

显然,您还需要一个 Pioneer Add-on Shield。您还需要一个 XBee WiFi 模块。根据您的设置,有一些 XBee WiFi 选项:Trace、RP-SMA 连接器(带外部 2.4GHz 天线)或电线。最简单的方法是使用有线天线获得 XBee。

您还需要 Raspberry Pi 3 入门套件。这将成为您从 PSoC6 Pioneer Board 进行通信的目标。当然,您可以单独购买 Pi 3 以及面包板、跳线、电阻器和 LED,但我们认为入门套件非常划算,非常值得购买。

硬件概览

让我们详细介绍一下 Pioneer Kit IoT 附加板的功能。

MicroSD 卡插槽 – 此插槽的引脚映射到大多数 Arduino 兼容板上的 SPI 外设,包括 PSoC 6 BLE Pioneer 板。

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 引脚或 MicroB 电源连接器上的 5V 电源获取电源。仅为 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 套件的 WiFi 到 Raspberry Pi

此示例演示如何通过 WiFi 向 Raspberry Pi 发送信号。它将向您展示如何访问 XBee WiFi 模块、PSoC 6 的两个内核之间的进程间通信以及如何使用 Raspberry Pi 接收和解析命令。

遵循此示例将需要进行一些设置,所以现在让我们逐步完成。

PSoC 6 Pioneer 套件设置:硬件

Pioneer Kit 侧的设置很简单:将 XBee WiFi 模块插入 Pioneer IoT Add-on Shield 并将扩展板插入 Pioneer Kit Board 的 Arduino 接头。

Raspberry Pi 方面需要更多解释。您需要在 Raspberry Pi 上设置一些硬件和一些软件。

PSoC 6 Pioneer 套件设置:软件

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

Pioneer Kit 的软件项目可在 GitHub 上找到。

PSOC 6 PIONEER 套件软件下载

下载并解压文件后,您可以在 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”获得 ”在 Raspberry Pi 的命令窗口中(有关打开命令窗口的说明,请参见下文)并查看“wlan0 ”部分。

要对电路板进行编程,请通过随附的 USB-A 至 USB-C 电缆将其连接到您的 PC。然后,点击工具栏中的“Program”按钮(如下图),即可自动构建工程并对板卡进行编程。

您可能会看到如下窗口,要求您选择要编程的目标。无论您在“KitProg2”列表项下选择哪个条目,都可以正确编程闪存。

Raspberry Pi 设置:硬件

先来看看硬件是怎么连接的:

如您所见,我们已将 LED(带有 330 欧姆电阻)连接到 Raspberry Pi 的引脚 3(GPIO 2)和 6(接地)。这将允许我们切换 GPIO2 并查看 LED 上的结果。

Raspberry Pi 设置:软件

我们将假设您有一个 Raspberry Pi,安装了最新版本的 Raspbian(完整安装,而不是精简版),并且它连接到键盘、鼠标、显示器和本地 WiFi 网络。如果这不是 这种情况下,请花一些时间进行设置。您可以在此处查看有关设置 Pi 的教程。

让我们从树莓派的桌面开始。你应该有一个看起来像这样的屏幕:

您需要单击屏幕顶部的小徽标(如下所示)以打开命令行。本教程的其余部分将假设您已打开该命令行。

这将打开一个命令行窗口。这允许你告诉树莓派直接执行命令。

我们将首先执行安装 Flask 的命令。 Flask 是 Python 的 Web 框架,它允许您制作一个 Web 前端,在服务器后端相当简单地运行 Python 脚本。键入以下命令,然后按“Enter”。
sudo pip install flask
命令行窗口中会发生一大堆事情,最后,Flask 将安装在您的 Raspberry 上圆周率。

下一步是从 GitHub 安装我们为支持该项目而编写的软件。执行此操作的命令是
git clone https://github.com/sparkfun/Flask_Tutorial
同样,您将看到一些文本在命令行中滚动,当提示返回时,表明安装过程已完成。完成后,输入以下命令:
sudo python Flask_Tutorial/Python/app.py
这将启动应用程序并开始侦听来自 Pioneer 板的 TCP/IP 输入。您现在应该可以通过按下 IoT Shield 上的 D7 和 D9 按钮来打开和关闭连接到 Raspberry Pi 的 LED。整洁!

这是怎么回事?铂。 1:先锋套件

让我们从 PSoC 6 软件项目的高级视图开始,看看到底发生了什么。查看屏幕左侧的 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+ 源文件。您会注意到该子域的顶级有五个条目:“头文件”、“源文件”和其他三个文件。我们只需要关心“头文件”和“源文件”子域的内容,实际上,其中只有一个文件:“main_cm0p.c “ 文件。这是在 Cortex-M0+ 处理器上运行的代码的 main() 函数所在的位置。

您可能已经从工作区的结构中猜到​​,有两个完全独立的代码库在为两个不同的内核运行。 “main_cm0p.c ”是 Cortex-M0+ 内核代码的入口点,然后该内核启动 Cortex-M4 内核。 Cortex-M4 内核有一个类似的子域,文件类似,我们只需要担心“头文件”和“源文件”子域。

最后,我们有“共享文件”部分。这些文件大部分是自动生成的,保存“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 已经完成了对指针值的读取。应用程序的循环,其中自定义函数 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() 循环中,这样它就会被持续调用,直到消息从皮质-M0+。然后我们必须释放对该 IPC 通道的锁定,以便 Cortex-M0+ 进程知道它可以继续运行并在将来使用 IPC 通道。不需要将它包含在 while() 循环中,因为它是开放式的:调用只需要发出一次即可释放锁,而不是检查锁是否已被释放,这必须重复直到锁被释放。
Cy_IPC_Drv_LockRelease(D9IpcHandle, CY_IPC_NO_NOTIFICATION);
所有这些都完成后,我们必须设置 XBee WiFi shield 以访问我们的本地网络。我们不会在这里复制所有代码,因为它在示例中有详细记录。

在运行应用程序代码的无限循环中,我们再次调用自定义函数 ReadSharedVar() 和 WriteSharedVar() 来访问保持按钮状态的变量,这些变量与 Cortex-M0+ 内核共享。让我们仔细看看这些函数的作用。

阅读更多信息……

将 PSoC 6 Pioneer Board 与 Pioneer IoT Add-on Shield 结合使用


制造工艺

  1. 与您的气象站一起加入 IOT – CWOP
  2. 将 A111 脉冲雷达传感器与 Raspberry Pi 结合使用
  3. 使用 MQTT 轻松进入物联网世界
  4. 使用 Raspberry Pi 和 Bridge Shield 的机器人
  5. GoPiGo v2 与 Windows IoT
  6. 将视觉数据与物联网集成的潜力
  7. 物联网之路
  8. 物联网基础设施与智慧城市的秘密
  9. 物联网世界:Vertica 的一天
  10. 通过 Lumada 物联网平台产品,日立连接各个点
  11. 企业物联网,最好的还在后面
  12. 在固特异,橡胶与物联网相遇