驱动程序示例和演练

Prev Next

简介

Version Compatibility

Users will not be able to have a driver run in an app until the Edge Driver Page is added. Please reach out to developer@tulip.co in the meantime.

如何使用 ESP32 开发板和现成的 DHT22 温湿度传感器测试自定义边缘驱动程序。

您将需要(前提条件):* 运行CircuitPython 的 LOLIN S3Mini* 您选择的 IDE(集成开发环境)-Visual Studio Code* Node.js 和 NPM

在本指南中,我们将举例说明如何为 ESP32 开发板和现成的 DHT22 温湿度传感器构建和测试自定义 Edge 驱动程序。

准备硬件

在本示例中,我们将使用LOLIN S3 Mini开发板(基于 ESP32-S3 微控制器)运行CircuitPython,从 DHT22 温湿度传感器读取数据。

将 DHT22 传感器连接到 ESP32

将 DHT22 传感器连接到 S3 Mini 非常简单:1. DHT22 上的 GND (-) → S3 Mini 上的 GND 引脚2.DHT22 上的 VCC (+) → S3 Mini 上的 3V3 引脚3。DHT22 上的 OUT (S) → S3 Mini 上的 D1 引脚(或任何可用的 IO 引脚)

读取传感器数据

下面是设置CircuitPython 的链接。

下面是一个简单的CircuitPython脚本,它每秒从 DHT22 传感器读取温度和湿度值,并通过 USB 串行接口以 JSON 格式打印数据。我们还将在每条信息前添加文本 "ESP:",这样我们的驱动程序就可以忽略日志和启动信息等其他串行信息。

将此脚本以 的格式保存在 CIRCUITPY 驱动器上,它将自动开始通过串行端口发送数据:```import adafruit_dhtimport boardimport timeimport json

dht = adafruit_dht.DHT22(board.D1)

while True: print( "ESP:", json.dumps( { "temperature": dht.temperature, "humidity": dht.humidity, }), ) time.sleep(1). ), ) time.sleep(1)```

创建边缘驱动程序

要创建自定义 Edge 驱动程序,您需要安装 Node.js 和 NPM。如果您尚未安装 Node.js 和 NPM,请遵循本指南

创建新的边缘驱动程序项目

运行以下命令创建新的边缘驱动程序项目:npx @tulip/create-edge-driver

按照提示配置驱动程序。在本例中,我们将把驱动程序命名为 "esp32-diy-sensor",并启用串行服务通过 USB 接口从 S3 Mini 读取数据。SDK

设置完成后,导航到项目目录并运行:npm run build此命令将:* 验证 manifest.json 文件* 编译 TypeScript 代码* 将驱动程序捆绑到 JavaScript 文件中,以便在 Tulip Player 中加载。

更新 manifest.json

首先,我们需要定义驱动程序实现的事件和功能。设备事件可用作 Tulip 应用程序中逻辑的触发器。例如,您可以设置一个应用程序触发器,如

"当我的传感器触发测量事件时,将温度数据存储到'车间温度'变量中"。

驱动程序还可以实现设备功能,这些功能可以响应应用程序中的触发器而执行。例如

"当我点击这个按钮时,调用设备上的'切换灯光'函数"。

在本例中,我们的驱动程序没有任何函数,但会在传感器进行测量时触发一个名为 "data "的事件。更新 src/manifest.json 文件中的 functions 部分,要么留空,要么完全删除:

json... "功能":[],...Then update the events section to define the shape of the "data" event.该事件将是一个包含两个浮动属性 "温度 "和 "湿度 "的对象:json... "事件":[ { "name":"data", "schema":{ "type":"object", "properties":{ "温度":{ "type":"float" }, "humidity":{ "type":"float" } } } } ],...

更新

现在,我们将编写驱动程序代码,使用 Edge Driver SDK 查找并连接到 S3 Mini 的 USB 串口,读取传入的串口数据,解析 JSON 消息,并使用 fireEvent() 触发 "data "事件。用以下新代码替换 src/index.ts 文件中的示例代码:

``jsedgeDriverSdk.SerialPort.listAvailablePorts().then((ports) => { const esp32port = ports.find((port) => port.productId === 33128); const serial = new edgeDriverSdk.SerialPort(esp32port.path, { baudRate: 115200, });

serial.onData((data) => { try { const decoder = new TextDecoder(); const stringData = decoder.decode(new Uint8Array(data)); const espData = JSON.parse(stringData.split("ESP: ")[1]); edgeDriverSdk.fireEvent("data", espData); } catch (error) { console.error(error); }; }; }; }; }; }; }. });

serial.open();});```在此示例中,当驱动程序首次启动时,我们会自动尝试使用 USB 设备的产品 ID 查找设备。不过,Edge Driver SDK 也支持将驱动程序配置为在系统检测到新设备时启动,这有助于制作更强大的生产驱动程序。

构建和运行驱动程序

更新驱动程序代码和 manifest.json 后,再次构建驱动程序:npm run build 这将生成已编译和捆绑的 JavaScript 文件,以及dist目录中已验证清单的副本。

SDK{height="" width="""}

在郁金香播放器中测试驱动程序

默认情况下,Tulip Player 使用开箱即用的内置驱动程序运行。不过,您也可以在 Tulip Player 中本地运行自定义驱动程序,即使没有 Tulip 实例。要做到这一点,你可以从命令行启动播放器,并输入驱动程序 dist 目录的路径。从此处下载并安装郁金香播放器

在 Windows 系统中,可以在终端使用set命令设置TULIP_PLAYER_CUSTOM_DRIVERS_PATH环境变量,然后在同一终端运行 "Tulip Player.exe":

batC:\Users\Bob> set "TULIP_PLAYER_CUSTOM_DRIVERS_PATH=C:\Users\Bob\Documents\esp32-diy-sensor\dist "C:\Users\Bob> "C:\Users\Bob\AppData\Local\tulip-player-desktop\Tulip Player.exe"

播放器启动后,在播放器应用程序中打开浏览器开发工具,并转到控制台选项卡。SDK{height="" width="""}

用"[CED]"过滤信息,查看驱动程序日志。

SDK{height="" width="""}

如果成功,您应该能看到实时记录温度和湿度值的 "数据 "事件。

在郁金香应用程序中使用驱动程序

很快,你就能将自定义驱动程序上传到你的 Tulip 实例中。在此之前,我们可以导入一个预定义的示例驱动程序。

进入 Tulip 库,安装任何带有安装按钮(如图的驱动程序。

按提示安装驱动程序。创建一个新的 Tulip 应用程序,并在步骤中添加一个 "机器和设备 "触发器。

SDK{height="" width="""}

你应该能在设备列表中看到导入的 ESP32 温湿度传感器。

SDK{height="" width="""}

现在,您可以创建一个触发器,用实时传感器数据更新一些应用程序变量。

SDK{height="" width="""}

在步骤中创建一些使用这些变量的部件,这样就可以在应用程序中直观地显示温度和湿度数据。

SDK{height="" width="""}

运行郁金香应用程序

设置好应用程序后,在 Tulip Player 中运行它。如果一切配置正确,您就能在应用程序中看到传感器值的实时更新!

SDK{height="" width="""}

就是这样!您已经在 Tulip 中成功构建、测试和集成了一个自定义边缘驱动程序!