编辑(2019年4月):原始文章写于2017年1月,回溯到Swift 3.0时代,当时Linux支持还很年轻。 截至此编辑之时,Swift已在5.0版本上发布,并且Linux支持比以前好得多。 如果您正在寻找有关Raspberry Pi上Swift的最新信息以及可以在系统上使用的预编译Swift二进制文件,我建议访问 Umberto Raimondi 博客。 一旦有更多时间,我将用新信息更新此帖子。 最近,我对编写与外部硬件设备(例如传感器或电动机)接口的软件感兴趣。 与外部硬件交互的最简单方法之一是通过Raspberry Pi。 小型计算机具有40个GPIO引脚,可让您将其连接到外部设备。 大约一个月前,我买了Raspberry Pi,看看我能用它做什么。 每天,我是一名iOS开发人员,为初创公司开发移动应用程序。 如今,我创建的大多数应用程序都是使用Swift编程语言编写的。 我爱斯威夫特。 新的Apple语言是现代,安全和富有表现力的。 尽管开发速度可能无法与Python等脚本语言相提并论,但是静态类型系统使整个应用程序更加安全可靠。 由于我精通Swift,因此我想探索它对Pi的支持。 这是我到目前为止发现的。 在Raspberry Pi上编写Swift需要两个主要组件: 该平台的Swift编译器和软件包管理器 一个支持GPIO的Swift库 尽管Apple确实发布了支持Linux的预编译Swift二进制文件,但它仅支持具有x86处理器的平台。 对Raspberry Pi等ARM设备没有官方支持。 但是Swift是开源的,在一些专门的贡献者的惊人工作下,Swift编译器被移植到ARM系统。 Umberto Raimondi最近发布了可在Pi上运行的Swift 3.0.2预编译二进制文件。 由于软件包管理器在那里被破坏,我在Raspbian版本上遇到了问题。 但是一旦我安装了Ubuntu Mate,然后安装了Swift Ubuntu二进制文件,一切都可以正常工作。 Umberto还是用Swift编写的GPIO库的作者。 您可以使用Swift Package Manager安装该库。 使用上述基础结构,我能够运行我的第一个Swift程序,以使用Raspberry Pi上的GPIO引脚点亮LED。 结论: Raspberry Pi对Swift的支持仍处于试验阶段,并由一组专门的开源贡献者推动。 地狱,甚至Linux支持都处于早期阶段,因为像Foundation这样的核心库尚未完全移植到OS。 没有IDE支持,起初,我使用nano编辑程序,这不是一种愉快的体验。 但是,Pi上的Swift可以使用,如果您想玩转,应该可以很快设置它。 希望苹果有一天会正式支持ARM平台,以便我们可以放心地部署Swift的全部功能!
我正在研究一个机器人项目,该项目的核心是具有Ubuntu最小(无GUI)和Swift 3.0的Raspberry Pi。 普通Ubuntu的问题在于,它要求您具有监视器,键盘和鼠标。 所有这些都给您带来不便,我很乐意通过将其插入机器来完成所有操作。 可悲的是,这是不可能的。 经过一些试验,我已经能够实现这一目标。 接下来是这个强大的书呆子的故事。 步骤1:准备 获取Raspberry Pi 2或3,具有8Gb或更多内存(10类或更多)的SD存储卡,微型USB电缆(用于供电),以太网电缆和Wifi USB软件狗。 第2步:在SD卡上最少刷新Ubuntu 16.04服务器 从此处或此处下载Ubuntu服务器经典版。 这是Ubuntu服务器的一种风格,已从并非严格必需的所有内容中删除了它,因此它非常轻便。 现在,您必须刷新SD卡上的图像。 在网络上,您会发现很多多步骤命令行指南。 但这很疯狂,因为有一个很棒的应用程序,叫做Etcher.io,可以使流程变得异常简单,快速和安全。 下载Etcher应用程序(适用于所有平台),然后选择Ubuntu映像,SD卡(您必须将其插入计算机中)并进行刷新。 几分钟,它将完成并验证。 将SD卡放入RPi,您就可以摇滚了! 步骤3:将Rsh插入RPi 将新备份的SD卡插入RPi之后,请在RPi与路由器之间连接以太网电缆。 通过将Micro USB电缆连接到电源或计算机上,打开RPi。 请耐心等待几分钟,因为首次启动的时间比平时长。 然后打开路由器的仪表板,查看与以太网连接的设备。 您将看到设备主机名ubuntu-minimal 。 记下该设备的IP。 打开您的终端并输入: ssh ubuntu @ THE_IP_YOU_JUST_FOUND (密码ubuntu) 你应该在里面! 现在,您已通过网络连接到RPi。 唯一的问题是,您仍然需要通过以太网电缆将RPi保持与网络的连接。 但是,让我们解决这个问题。 步骤4:走向无线 首先,我们需要更新操作系统: sudo apt-get更新 sudo apt-get升级 安装wifi支持: sudo apt-get install wireless-tools wpasupplicant 现在重启。 […]
在这里,我们安装了带有Raspbian和Swift 3.0的Raspberry Pi。 现在,我们实际上可以对其进行处理。 就像闪烁不发光的LED一样。 但是,嘿,我们必须从某个地方开始… 步骤1:了解GPIO引脚号 核心概念是板上并非所有可用的引脚都是GPIO(通用输入/输出)。 有些是电源,有些是接地,有些是其他东西 。 圆圈内的数字是图钉号 。 这些引脚中的一些与GPIO引脚匹配。 例如, 引脚7与GPIO4引脚匹配。 我们只能控制GPIO引脚,而不能控制其他引脚。 其他的用来给电路加电或做其他事情 。 步骤2:连接电路 我们想创建一个简单的电路,其中通过GPIO4(引脚7)打开LED。 因此,我们创建了一个简单的电路,如下所示: 步骤3:确保我们可以在GPIO引脚上实际设置一个值 我们正在安装一个软件包,该软件包允许我们从命令行在引脚上设置值。 只是为了确保我们实际上能够将GPIO值调高和调低。 须藤apt-get installconnectionpi 现在,将引脚7设置为输出,然后将其关闭,然后再打开然后再次关闭: gpio模式7出 gpio写7 0 gpio写7 1 gpio写7 0 它应该工作。 如果没有,那么很可能是您的电路中出现了一些接线错误。 步骤4:使用SwiftyGPIO库控制GPIO引脚 Uraimo在GPIO引脚周围创建了一个非常漂亮的Swift包装器,因此我们可以在Swift应用中对其进行控制。 几乎没有什么可以做得更好的(例如,不同的GPIO类型的更多面向协议的表示,GPIO状态的更好表示以及GPIO表示的更多不变性),但这仍然是一个很好的起点。 由于Swift软件包管理器迄今为止在Raspbian上仍无法正常工作(2016年7月8日),因此我们将克隆git repo并直接在代码中使用该文件。 重要的一点是将所有源文件放在一个文件夹中,以便能够用一个简单的命令将它们全部编译。 mkdir〜/ ledtest mkdir〜/ ledtest /来源 cd〜/ ledtest git clone https://github.com/uraimo/SwiftyGPIO.git cp SwiftyGPIO / […]
在这里,我们使用的是Raspberry Pi,配置了最低Ubuntu 16.04并安装了Swift 3.0。 现在,让我们使用Swift打开和关闭LED! 步骤1:了解GPIO引脚号 核心概念是板上并非所有可用的引脚都是GPIO(通用输入/输出)。 有些是电源,有些是接地,有些是其他东西 。 圆圈内的数字是图钉号 。 这些引脚中的一些与GPIO引脚匹配。 例如, 引脚7与GPIO4引脚匹配。 我们只能控制GPIO引脚,而不能控制其他引脚。 其他的用来给电路加电或做其他事情 。 步骤2:连接电路 我们想创建一个简单的电路,其中通过GPIO4(引脚7)打开LED。 因此,我们创建了一个简单的电路,如下所示: 步骤3:确保我们可以实际在GPIO引脚上设置值 WiringPi是一套从端子控制GPIO引脚的工具。 实际上,出于测试目的,这非常方便。 遗憾的是,这并不像安装deb包那么简单,但是我们需要获取源代码并进行构建。 在确保我们已经安装了一些编译依赖项之前,请执行以下操作: sudo apt-get install build-essential git-core 然后让我们构建WiringPi: 光盘〜 git clone git://git.drogon.net/wiringPi CD接线Pi 。/建立 现在,您可以通过读取所有Raspberry Pi引脚的状态来测试二进制文件是否已正确编译: gpio readall 应该打印这样的东西: 让我们将gpio二进制文件移到根级别,以使其更方便调用: 须藤cp gpio / gpio / usr / bin / 现在让我们设置引脚7 (wPi列中的数字) 作为输出并将其关闭,然后再打开,然后再次关闭: […]
确保您添加了Alamofire容器,这就是我们将用来向烧瓶服务器发出GET请求的容器。 返回您的终端,并确保您仍在正确的目录中,然后致电: 吊舱安装 现在应该安装Alamofire了,我们可以发出GET请求了。 确保您现在正在打开工作区文件。 设计UI 本节将简短,因为您应该自行设计UI,但是,您要确保我们用python编写的每个命令都有5个按钮。 前进,后退,左,右,停止。 打开助手编辑器,然后按住Ctrl并将每个按钮拖到ViewController.swift中。 确保将连接从IBOutlet切换到IBAction。 您现在应该在ViewController.swift文件中具有以下5个连接: 如果按钮已连接到main.storyboard,则应填充每个IBAction旁边的圆圈。 现在我们要导入Alamofire。 在导入UIKit上方,输入: 进口Alamofire 发出GET请求 最后一步,我们需要根据要运行Pi的功能向每个动作添加Alamofire请求。 在每个IBAction下写: Alamofire.request(“ http:// IPADDRESS:PORT / ROUTE”).responseString {(已打印)在 让结果=打印。描述 打印(结果) } 重要: IPADDRESS =您的Rasberry Pi的IP地址,可以通过在Pi的命令行中输入以下地址来找到: 须藤ifconfig PORT =您在Python文件中选择的任意端口EX:5000 ROUTE =烧瓶服务器将使用EX的Python函数路由:“ / forward” 运行遥控器 现在我们完成了,请继续使用Raspberry Pi并启动flask服务器: cd桌面 cd sudo python pythonRemote.py 然后将您的iOS应用构建到iOS设备或模拟器上,然后单击按钮以运行您的功能! 您应该在Xcode调试器和Raspi终端中看到响应。 如果您跟随GoPiGo功能一起使用,那么您现在应该拥有一辆遥控车! 这可以用于远程运行用flask和Python为pi编写的任何函数。 请在下面分享您的项目! 在我的github上查看我的代码。
Swift成为了完全开放源代码(Apache 2.0许可)项目,并且走得更远,这使得Swift不仅可以在Darwin设备上运行,而且可以在Linux和其他平台(例如Android,raspberry-pi,大型机)上运行。 所有繁重的工作都是由Swift社区完成的,以使Swift可以在Linux和多个平台上使用,并且还在不断增长。 这意味着在大多数平台上都可以使用Foundation API,Swift语言,所有标准库以及用于并发的Dispatch。 现在大约有数十种可用的框架,包括IBM的Kitura,PerfectlySoft的Perfect,基于Swift语言的Q理论的Vapor。 为什么选择Swift? Swift是Java之类的高性能语言 Swift的内存使用率低 重用客户端代码,工作空间,工具和组件可以加快开发速度并提高生产率 IBM的Kitura Kitura是使用IBM开发的Swift语言编写的服务器端模块化框架。 Swift语言主要用于为Apple App Store创建基于iOS的应用程序。 开发人员必须为Java,Python,Ruby等后端编程选择不同的语言,基于Swift的客户端可以将其连接以进行CRUD操作。 Kitura使iOS开发人员更容易使用一种语言进行前端和后端编程,并创建完整的应用程序。 Kitura框架的重点 基于模块化和打包的Web框架 开箱即用,并利用Foundation API在macOS和Linux上创建应用程序。 Swift具有高性能,安全性和表现力,因此具有Kitura的特质。 轻松部署到IBM Bluemix和Watson集成等云平台,以创建Cognitive应用程序。 Xcode支持可实现更快,更轻松的开发 Yeoman生成器可在几分钟内创建和部署您的应用 全栈演示 使用ServerSide Kitura,IBM Watson和IoT平台控制由PI驱动的机器人 我们将为Raspberry PI驱动的机器人创建一个Remote,并使用服务器端Kitura作为中间件。 该机器人还将与Watson Text-To-Speech服务集成在一起。 遥控器将能够控制机器人的两件事: 输入文字让机器人说出来 选择一种颜色让机器人闪烁 建筑 遥控器使用swift构建并运行在iOS设备上。RobotRemote Control应用程序使用公开的REST API与基于Kitura的服务器进行通信。 该服务器具有CRUD API以及一个接受远程输入并将其发送到IBM IoT平台的API。 服务器上的API从远程应用程序接收JSON数据,并以MQTT消息的形式发布到IoT平台。 服务器使用Aphid MQTT客户端将消息发布到IBM IoT平台上的某个主题。 该机器人是使用raspberry-PI构建的。 LED和扬声器已连接到raspberry-PI。 PI运行一个nodejs应用程序,该应用程序正在侦听来自IoT平台的MQTT消息,该主题与基于Kitura的服务器发布消息的主题相同。 接收到MQTT消息后,将使用Watson开发人员云SDK将接收到的文本转换为语音,并将其通过管道传输到安装在raspberry-PI中的扬声器。 树莓派PI还运行Python代码,将正确的颜色信号发送到LED,使其闪烁。 创建远程机器人服务器 先决条件: […]
为了使这个基本任务复杂化并学到一些有趣的东西,可以使用Docker并在容器中运行我们的服务器。 有很多关于Docker的教程(我建议您查阅https://www.digitalocean.com教程),因此我将只关注与我的项目相关的部分。 我遵循了本教程:https://bygri.github.io/2018/05/14/developing-deploying-vapor-docker.html 因为服务器代码非常简单,所以我没有使用单独的开发/生产设置和docker-compose。 要启动蒸气项目: 蒸发新的上传图像 我从模板中剥离了所有不必要的代码(删除了数据库依赖项),并将route.swift减少为: 进口蒸气 结构图片:内容{ var image:文件 } 公共 功能路由( _路由器:路由器) 抛出 { router.post(“ image”){ req-> Future 在 返回 尝试 req.content.decode(Image.self).map(to:HTTPStatus.self){fileImage in 让 imageFolder =“ / app / Public” 让 fileName = fileImage.image.filename 让 url = URL(fileURLWithPath:imageFolder).appendingPathComponent(fileName) 做 { 尝试 fileImage.image.data.write(to:url) } { 返回 .badRequest } 返回 .ok } } } […]