1. Go + 硬件

此存储库是工具,软件包和教程的目录,可让您在硬件项目中介绍Go。

1.1. 为什么选go?

  • Go可以针对主要在非实时嵌入式操作系统范围内的平台和体系结构。

    • 对Linux的ARMv5,ARMv6,ARMv7和ARMv8支持
    • ARMv7,ARMv8,x86对Android的支持
    • 实验性OpenWRT
  • 开箱即用的交叉编译故事。

    • 例如,运行GOOS=linux GOARCH=arm go build以从Mac或Windows机器为ARM / linux板构建二进制文件。不需要其他配置。
  • Go中内置的并发原语使得编写并发程序变得更加容易。

    • 在实施硬件控制器方面的强大优势。
    • 在实施网络设备方面的强大优势。
  • Go是垃圾收集语言,但是自Go 1.4起,垃圾收集器的占用空间已得到显着改善。即使对于大堆,暂停时间也被定为10ms或更短,并且在非实时操作系统上并不是一个明显的缺点-OS调度程序的抢占性质比暂停时间更是一个主要问题。

  • Go的网络堆栈质量高且维护良好。网络是物联网的核心组件。

  • Go提供了现成的HTTP,HTTPS和HTTP / 2客户端/服务器实现。

    • 标准库可能缺少P2P协议的更高级别的实现,但是社区正在努力弥补这一空白。
    • 社区还投入时间来实施更新的以物联网为目标的网络协议,例如COAP。
  • 与其他高级编程语言(如Python和Java)不同,使用Go语言在Go中编写C绑定非常简单。从Go上下文中依赖现有的C / C ++库要容易得多。

    • 例如,portmidi绑定。请参阅源代码,以了解如何在同一个Go文件中混合和匹配Go和C代码。
  • 类似于C的语法使现有的IoT /嵌入式编程人员(大多熟练使用C语言)可以在无需过多了解该语言的情况下读写Go。

  • Go程序可编译为静态二进制文件,并且不需要主机(例如VM)上的运行时。部署是复制/粘贴二进制文件。

  • Go拥有强大的社区人物,从早期开始就从事硬件方面的工作。

    • Gobot在第一届GopherCon上首次亮相。
    • 社区已经提供了许多围绕硬件和机器人技术的库和框架。可以在go硬件上找到列表。
  • Go高效,快速且内存占用少。

  • 服务器和客户端(连接的设备或移动设备)之间的代码重用。

    • 例如,gRPC Go在服务器,Android,iOS和嵌入式Linux上开箱即用。

1.2. 讲解

1.3. 配套

1.3.1. 控制器

  • devices - Go的高级设备/传感器软件包的存储库。
  • gobot - 具有各种平台API的高级Go软件包,可与流行的驱动程序进行通信,例如Arduino和Raspberry Pi上的GPIO,Leap Motion或Pebble。
  • go-gpio - Go的GPIO,不需要cgo。
  • embd - Go的嵌入式编程框架。
  • fadecandy - 基于OPC的抖动LED控制器
  • godrone - 用Go编写的高级Parrot AR Drone 2.0框架。
  • launchpad - Novation Launchpad的高级控制器库。
  • littlebits - 用于Go的littleBits控制器。它需要USB I/O 模块。
  • piCamera - 在GoLang中为Raspberry Pi相机捕获图像流
  • hwio - 松散地基于Arduino的ARM板的硬件库,例如Raspberry Pi和BeagleBone。
  • go-lepton - 将通过连接到Raspberry Pi SPI端口的FLIR Lepton上拍摄的图像通过WebSockets通过嵌入式HTTP服务器进行流式传输。
  • go-embedded - 对I2C,SPI,PWM,GPIO,ADC的嵌入式Linux支持
  • go-beaglebone - BeagleBone开源硬件的Go包
  • go-mavlink - Go的MAVLink协议实现(MAVLink用于控制无人机)
  • joystick - 一种轮询的API,用于读取连接的操纵杆的状态。
  • emgo - 一种用于对嵌入式系统(例如STM32 MCU)进行编程的类语言。
  • go-rpi-rgb-led-matrix - matrix-使用Raspberry Pi GPIO控制多达三个链的32x32或16x32 RGB LED显示
  • go-rpi-ws281x - 用于WS281X LED的Raspberry Pi PWM库的绑定
  • ghw - Golang硬件发现/检查库
  • sysinfo - 一个纯的Go库,提供Linux OS /内核/硬件系统信息。

1.3.2. 信号处理,计算机视觉,图形,媒体

  • go-gl - Go的OpenGL绑定。
  • go-opc - Go的开放像素控件绑定。
  • go-opencv - Go的OpenCV绑定。
  • go-sox - Go的SoX绑定。
  • portaudio - Go的PortAudio绑定。
  • portmidi - Go的PortMidi绑定。
  • go-osc - 为Go打开声音控制(OSC)绑定。
  • openvg - 包装OpenVG API的2D图形库
  • lirc - Linux红外遥控器的Go Client。允许发送和接收IR命令。
  • gocv - Go的OpenCV 3+绑定。还支持OpenVINO。

1.3.3. 网络,外围通讯

  • mdns - Go中的mDNS服务器和客户端实现。组播DNS可用于在本地网络上发现服务和消息,而无需使用权威DNS服务器。
  • gatt - 提供蓝牙低功耗GATT实施。
  • go.hid - 提供与USB人机接口设备的通信。
  • goble - Go的蓝牙低功耗(HM10)模块
  • serial - Go的串行端口通讯程序包
  • firmata - Go的Firmata客户
  • periph - 外设I / O在Go
  • go-ckb - Go中的Corsair ckb-daemon通信
  • ble - 适用于Linux / macOS的低功耗蓝牙通信包装器。

1.3.4. 移动版(1.5或更高版本)