硬件
发布者:admin 发表于:417天前 阅读数:697 评论:0

Go + 硬件

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

为什么选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.5及更高版本) [@rakyll](https://medium.com//go-1-5-cross-compilation-488092ba44ec"target="_blank">交叉编译指南

(执行1.4及更低版本)) 交叉编译指南

查阅ARM技巧,已知问题和成功案例

配套

控制器

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 /内核/硬件系统信息。

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

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。

网络,外围通讯

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.5或更高版本)

本机应用程序(Android和iOS)

SDK应用程序