ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Gobot 驱动 C.H.I.P. 与 C.H.I.P. Pro 开发实战:引脚映射、PWM 配置与交叉编译部署

Gobot 驱动 C.H.I.P. 与 C.H.I.P. Pro 开发实战:引脚映射、PWM 配置与交叉编译部署 物联网机器人嵌入式【免费下载链接】gobotGolang framework for robotics, drones, and the Internet of Things (IoT)项目地址https://gitcode.com/gh_mirrors/go/gobot点击查看免费下载本文是 Gobotgobot.io/x/gobot/v2在 C.H.I.P. 及 C.H.I.P. Pro 单板计算机上开发机器人与 IoT 应用的技术指南。你将掌握基于 platforms/chip/README.md 的完整工作流在工作站上安装 Go 与 Gobot、通过 Gort CLI 启用 PWM 设备树覆盖、按板面标注的引脚名编写驱动代码以及跨架构交叉编译后用scp/ssh部署到板卡上运行。文中同时结合仓库内适配器源码与测试解释引脚编号、I2C 总线、PWM 通道的底层映射关系帮助你写出可复现、可直接运行的 C.H.I.P. 程序。C.H.I.P. 平台概览C.H.I.P. 是一块小巧、低成本的基于 ARM 的单板计算机其引脚排针上提供了丰富的 IO 接口包括 GPIO、I2C、PWM、UART、SPI 等。C.H.I.P. Pro 则是面向嵌入式产品开发设计的版本两者在引脚资源上略有差异Gobot 分别通过NewAdaptor()与NewProAdaptor()两个构造函数支持。在 Gobot 中C.H.I.P. 适配器位于 platforms/chip/chip_adaptor.go其包注释platforms/chip/doc.go明确声明Package chip contains the Gobot adaptor for the CHIP and CHIP Pro即一个包同时承载两类板卡的适配能力。安装环境与系统要求文档建议在 C.H.I.P. 上使用最新的 Debian OS同时 Gobot 也兼容较旧版本的操作系统因此如果你的应用有特殊依赖保留旧系统同样可行。推荐的开发方式是工作站编译、板卡运行的两段式工作流在你的工作站上安装 Go 与 Gobot在工作站上交叉编译你的程序将最终可执行文件传输到 C.H.I.P. 上在 C.H.I.P. 本机运行该程序。整个项目级的安装与依赖说明可参考仓库根目录的 README.md模块版本与 Go 版本要求见 go.mod当前模块为gobot.io/x/gobot/v2。PWM 支持与设备树覆盖Device Tree Overlay需要注意PWM 可能并未在你的内核中启用。此时需要在 C.H.I.P. 设备上用 Gortgobot.io/x/gortCLI 安装所需的设备树覆盖device tree overlay。步骤如下安装经过修补的设备树编译器device tree compilergort chip install dtc安装 PWM overlay以在 PWM0 引脚上激活 PWMgort chip install pwm重启设备确保 init 脚本在开机时加载该 overlayreboot重启后PWM 子系统会在/sys/class/pwm/pwmchip0下暴露通道这正是 Gobot 适配器在translatePWMPin()中写入 PWM sysfs 路径/sys/class/pwm/pwmchip0的前提见 platforms/chip/chip_adaptor.go。如何使用适配器与驱动示例创建适配器标准 C.H.I.P. 使用NewAdaptor()chipAdaptor : chip.NewAdaptor()C.H.I.P. Pro 使用NewProAdaptor()chipProAdaptor : chip.NewProAdaptor()从源码看NewProAdaptor()复用了NewAdaptor()的初始化逻辑仅将默认名称改为 CHIP Pro并将引脚映射表切换为chipProPins见 platforms/chip/chippro_adaptor.go。引脚编号原则你的 Gobot 程序使用的引脚编号应与板卡本体上的丝印标注保持一致。也就是说程序里写XIO-P0板卡排针上也应标注XIO-P0两者一一对应避免在底层数字编号上做手工换算。完整示例读取按钮参考 examples/chip_button.go一个完整的按钮事件程序如下package main import ( fmt gobot.io/x/gobot/v2 gobot.io/x/gobot/v2/drivers/gpio gobot.io/x/gobot/v2/platforms/chip ) func main() { chipAdaptor : chip.NewAdaptor() button : gpio.NewButtonDriver(chipAdaptor, XIO-P0) work : func() { _ button.On(gpio.ButtonPush, func(data interface{}) { fmt.Println(button pressed) }) _ button.On(gpio.ButtonRelease, func(data interface{}) { fmt.Println(button released) }) } robot : gobot.NewRobot(buttonBot, []gobot.Connection{chipAdaptor}, []gobot.Device{button}, work, ) if err : robot.Start(); err ! nil { panic(err) } }该程序将按钮驱动绑定到XIO-P0引脚注册按下ButtonPush与释放ButtonRelease两个事件回调并通过 Gobot 的 Robot 框架统一管理连接adaptor与设备driver的生命周期。更多可运行示例仓库 examples 目录下还有多个 C.H.I.P. 专属示例可作为扩展参考examples/chip_blink.goLED 闪烁使用gpio.NewLedDriver(chipAdaptor, XIO-P6)与gobot.Every(1*time.Second, ...)周期翻转examples/chip_blinkm.go通过 I2C 驱动 BlinkM 彩灯每秒生成随机 RGB 并回读颜色examples/chip_button_led.go按钮与 LED 联动examples/chip_grove_lcd.go通过 I2C 驱动 Grove LCD演示写字符、设置 RGB 背光、自定义字符与滚动examples/chip_drv2605l.goI2C 触觉马达驱动examples/chip_mpu6050.go、examples/chip_tsl2561.go、examples/chip_wiichuck.go分别演示加速度计、光传感器与 WiiChuck 手柄等 I2C 设备。注意这些示例文件均带有//go:build example构建标签见 examples/chip_button.go默认不参与构建编译时需显式启用该标签。引脚映射与底层实现解析Gobot 对 C.H.I.P. 的引脚管理建立在 sysfs 之上NewAdaptor默认使用system.WithDigitalPinSysfsAccess()见 platforms/chip/chip_adaptor.go。每个引脚在代码中被建模为sysfsPin{pin, pwmPin}结构其中pin是 sysfs GPIO 编号pwmPin是 PWM 通道号-1 表示不支持 PWM。标准 C.H.I.P. 引脚表chipPinsplatforms/chip/chip_pinmap.go 定义了标准 C.H.I.P. 的静态引脚映射摘录如下引脚名GPIO 编号PWM 通道典型用途PWM0340唯一 PWM 输出AP-EINT1193-外部中断AP-EINT335-外部中断TWI1-SCK / TWI1-SDA47 / 48-I2C 总线 1TWI2-SCK / TWI2-SDA49 / 50-I2C 总线 2UART1-TX / UART1-RX195 / 196-串口LCD-D2 ~ LCD-D23 等98 ~ 123-LCD 数据/控制线CSIPCK / CSICK / CSIHSYNC / CSIVSYNC128 ~ 131-CSI 摄像头接口CSID0 ~ CSID7132 ~ 139-CSI 数据线XIO-P0 至 XIO-P7扩展器动态映射除静态表外XIO-P0至XIO-P7这 8 个引脚来自板上的 PCF8574A I/O 扩展器对应排针 14 的 13~20 号引脚。适配器在初始化时通过getXIOBase()扫描/sys/class/gpio/*/label查找 label 前缀为pcf8574a的扩展器并读取其base文件从而动态算出 8 个 XIO 引脚的实际 GPIO 编号若找不到例如内核较旧则回退到 4.3 内核时代的默认基址 408见 platforms/chip/chip_adaptor.goa.pinMap chipPins baseAddr, _ : getXIOBase() for i : 0; i 8; i { pin : fmt.Sprintf(XIO-P%d, i) a.pinMap[pin] sysfsPin{pin: baseAddr i, pwmPin: -1} }这也是chip_button.go与chip_blink.go分别使用XIO-P0、XIO-P6即可直接工作的原因。C.H.I.P. Pro 引脚表chipProPinsplatforms/chip/chippro_pinmap.go 定义了 Pro 版本映射与标准版的关键差异在于PWM 通道扩展除PWM0GPIO 34通道 0外Pro 版新增PWM1GPIO 205通道 1无 XIO 引脚Pro 版不再映射XIO-P0~XIO-P7在 Pro 上使用这些引脚名会得到 is not a valid id for a digital pin 错误测试 platforms/chip/chippro_adaptor_test.go 验证了这一点保留了 LCD、CSI、UART1、TWI2-SCK/SDA、AP-EINT1/3 等映射。引脚名合法性由translateDigitalPin()统一校验platforms/chip/chip_adaptor.go无效引脚名会返回明确的错误信息。I2C 总线配置适配器支持的总线编号为 0、1、2对应/dev/i2c-0至/dev/i2c-2默认总线为 1源码常量defaultI2cBusNumber 1与BusNumberValidator([]int{0, 1, 2})见 platforms/chip/chip_adaptor.go。测试 platforms/chip/chip_adaptor_test.go 确认DefaultI2cBus()返回 1。PWM 与舵机输出PWM 引脚通过translatePWMPin()映射到/sys/class/pwm/pwmchip0的对应通道。测试验证了默认行为platforms/chip/chip_adaptor_test.goPwmWrite(PWM0, 100)会导出通道、写入周期10000000纳秒10 ms即 100 Hz与对应占空比并设置极性为normal舵机输出需 50 Hz即周期20000000纳秒可通过adaptors.WithPWMDefaultPeriodForPin(pin, fiftyHzNano)选项预设0° 对应脉宽 500 µs180° 对应 2.5 ms对不支持 PWM 的引脚如AP-EINT3调用 PWM 写入会返回 AP-EINT3 is not a valid id for a PWM pin。SPI 支持标准适配器默认不启用 SPISpiBusAdaptor为空测试 platforms/chip/chip_adaptor_test.go 断言其为 nil。只有在传入adaptors.WithSpiGpioAccess(sclk, ncs, sdo, sdi)选项、用 GPIO 位拆bit-bang替代/dev/spidev#.#时SPI 总线才会被初始化且默认最高时钟为 5 kHz注释明确指出超过 15 kHz 不可行见 platforms/chip/chip_adaptor.go。交叉编译与部署到板卡编译在安装好 Go 与 Gobot 的工作站上用以下命令交叉编译出 ARM 平台可执行文件GOARM7 GOARCHarm GOOSlinux go build examples/chip_button.go参数说明环境变量值作用GOOSlinux目标操作系统为 LinuxGOARCHarm目标 CPU 架构为 32 位 ARMGOARM7ARMv7 指令集C.H.I.P. 采用 ARMv7 架构的 SoC若在仓库内直接编译带example构建标签的示例需同时传入构建标签例如GOARM7 GOARCHarm GOOSlinux go build -tags example examples/chip_button.go上传与运行编译完成后从工作站通过scp上传可执行文件并通过ssh在板卡上执行scp chip_button root192.168.1.xx: ssh -t root192.168.1.xx ./chip_button将192.168.1.xx替换为你 C.H.I.P. 的实际 IP 即可。-t参数为 ssh 分配伪终端便于交互式观察程序输出上传与执行均以 root 身份进行这是文档给出的默认操作方式。连接生命周期与资源释放适配器的Connect()按 I2C → PWM → 数字引脚GPIO的顺序建立连接Finalize()则按相反顺序释放并对 PWM、I2C 的清理错误做多错误合并multierror确保单个接口失败不会掩盖其余错误见 platforms/chip/chip_adaptor.go。这意味着在 Gobot 的 Robot 框架中robot.Start()会自动完成板卡初始化与引脚配置程序退出时资源会被可靠回收。小结围绕 platforms/chip/README.md 所述工作流本指南结合源码补充了完整的实现细节安装工作站装 Go 与 GobotC.H.I.P. 上用gort chip install dtc/gort chip install pwm并重启以启用 PWM引脚程序使用板面丝印名称如XIO-P0、PWM0标准版与 Pro 版分别由chipPins与chipProPins驱动XIO 引脚依赖 PCF8574A 扩展器动态编号总线I2C 支持 0~2 号总线且默认 1SPI 需显式开启 GPIO 位拆模式部署以GOARM7 GOARCHarm GOOSlinux交叉编译再经scp与ssh在板卡上运行。对照 platforms/chip/chip_adaptor_test.go 与 platforms/chip/chippro_adaptor_test.go 中的行为断言你可以验证任意引脚名、PWM 通道与总线编号的实际结果为在 C.H.I.P. 与 C.H.I.P. Pro 上构建稳定的机器人、无人机与 IoT 应用打下可靠基础。赞分享物联网机器人嵌入式【免费下载链接】gobotGolang framework for robotics, drones, and the Internet of Things (IoT)项目地址https://gitcode.com/gh_mirrors/go/gobot点击查看免费下载相关推荐Gobot 驱动 DragonBoard 410c交叉编译部署流程与引脚映射源码深度解析Gobot 驱动 DragonBoard 410c交叉编译部署流程与引脚映射源码深度解析 本文是一份面向 Gobot 开发者的 DragonBoard 410物联网机器人嵌入式Gobot 驱动 Intel Edison 开发板环境配置、程序交叉编译与 GPIO/PWM/I2C 实战指南Gobot 驱动 Intel Edison 开发板环境配置、程序交叉编译与 GPIO/PWM/I2C 实战指南 本指南以 Gobot 框架中 Intel Ed物联网机器人嵌入式小智 ESP32-C6-ePaper-1.54 开发板适配指南引脚映射、墨水屏驱动与编译配置小智 ESP32 C6 ePaper 1.54 开发板适配指南引脚映射、墨水屏驱动与编译配置 本文基于 xiaozhi esp32 开源仓库中 Wavesha人工智能大模型语音交互助手嵌入式物联网智能硬件MCP 服务上一篇Apache Doris分布式锁机制高效并发控制的终极指南下一篇使用 swagger-codegen 生成 R 语言 API 客户端Petstore 样例的安装、使用与源码级解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表