【原创】树莓派3B开发Go语言(四)-自写库实现pwm输出 在前一小节中介绍了点亮第一个LED灯 , 这里我们准备进阶尝试下,输出第一段PWM波形 。(PWM也就是脉宽调制,一种可调占空比的技术,得到的效果就是:如果用示波器测量引脚会发现有方波输出,而且高电平、低电平的时间是可调的 。)
这里爪爪熊准备写成一个golang的库 , 并开源到github上,后续更新将直接更新到github中,如果你有兴趣可以和我联系 。github.com/dpawsbear/bear_rpi_go
我在很多的教程中都看到说树莓派的PWM(硬件)只有一个GPIO能够输出,就是GPIO1。这可是不小的打击,因为我想使用至少四个PWM,还是不死心 , 想通过硬件手册上找寻蛛丝马迹,看看究竟怎么回事 。
手册上找寻东西稍等下讲述,这里先提供一种方法测试树莓派3B的PWM方法:用指令控制硬件PWM 。
这里通过指令的方式掌握了基本的pwm设置技巧,决定去翻一下手册看看到底PWM怎么回事,这里因为没有BCM2837的手册,根据之前文章引用官网所说,BCM2835和BCM2837应该是一样的 。这里我们直接翻阅BCM2835的手册,直接找到PWM章节 。找到了如下图:
图中可以看到在博通的命名规则中 GPIO 12、13、18、19、40、41、45、52、53 均可以作为PWM输出 。但是只有两路PWM0 PWM1 。根据我之前所学知识,不出意外应该是PWM0 和 PWM1可以输出不一样的占空比 , 但是频率应该是一样的 。因为没有示波器,暂时不好测试 。先找到下面对应图:
根据以上两个图对比可以发现如下规律:
对照上面的表可以看出从 BCM2837 中印出来的能够使用在PWM上的就这几个了 。
为了验证个人猜想是否正确,这里先直接使用指令的模式,模拟配置下是否能够正常输出 。
通过上面一系列指令模拟发现,(GPIO1、GPIO26)、(GPIO23、GPIO24)是绑定在一起的,调节任意一个,另外一个也会发生变化 。也即是PWM0、PWM1虽然输出了两路,可以理解成两路其实都是连在一个输出口上 。这里由于没有示波器或者逻辑分析仪这类设备(仅有一个LED灯),所以测试很简陋,下一步是使用示波器这类东西对频率以及信号稳定性进行下测试 。
小节:树莓派具有四路硬件输出PWM能力 , 但是四路中只能输出两个独立(占空比独立)的PWM,同时四路输出的频率均是恒定的 。
上面大概了解清楚了树莓派3B的PWM结构,接下来就是探究如何使用Go语言进行设置 。
因为拿到了手册,这里我想直接操作寄存器的方式进行设置 , 也是顺便学习下Go语言处理寄存器的过程 。首先需要拿到pwm 系列寄存器的基地址,但是翻了一圈手册,发现只有偏移,没有找到基地址 。
经过了一段时间的努力后,决定写一个 树莓派3B golang包开源放在github上,只需要写相关程序进行调用就可以了,以下是相关demo(pwm)(在GPIO.12 上输出PWM波,放上LED灯会有呼吸灯的效果,具体多少频率还没有进行测试)
以下是demo(pwm) 源码
# 手摸手教你使用 树莓派 go语言 点亮一个led说明:这里笔者使用 gobot框架
官网:
执行下面命令:
命令执行完成后 , 会生成一个main的二进制文件,那个就是我们的程序
备注:如果树莓派go语言你想编译其树莓派go语言他版本的树莓程序?修改 GOARM 即可
GOARM=6 (Raspberry Pi A, A , B, B , Zero) GOARM=7 (Raspberry Pi 2, 3)
备注:总结后面有上传脚本^?_?^
1.请确保你已经连接到树莓派了
2.如果无法上传 , 或者报错,请查权限是否正确
执行上传命令:
scp mainpi@192.168.1.xxx :/home/pi/
1.请确保你已经连接到树莓派了
进入 /home/pi (就是你刚上传的文件路径)
运行它: ./main
祝你好运!
1.上传文件的时候 , 请注意命令
2.不知道如何ssh登陆树莓派?(请看我上一篇文章)
3.当然需要一点linux的知识
树莓派可以用go语言写吗可以的 。树莓派是为学习计算机编程教育而设计 , 只有信用卡大小的微型电脑,树莓派可以用go语言写的 。Go是Google的RobertGriesemer,RobPike及KenThompson开发的一种静态强类型、编译型语言 。
如何编译arm linux的goGolang也就是Go语言,现在已经发行到1.4.1版本了,语言特性优越性和背后Google强大靠山什么的就不多说了 。Golang的官方提供了多个平台上的二进制安装包 , 遗憾的是并非没有发布ARM平台的二进制安装包 。ARM平台没办法直接从官网下载二进制安装包来安装 , 好在Golang是支持多平台并且开源的语言 , 因此可以通过直接在ARM平台上编译源代码来安装 。整个过程主要包括编译工具配置、获取Golang源代码、设置Golang编译环境变量、编译、配置Golang行环境变量等步骤 。
注:本文选用树莓派做测试 , 因为树莓派是基于ARM平台的 。
1、编译工具配置
据说下个版本的golang编译工具要使用golang自己来写,但目前还是使用C编译工具的 。因此 , 首先要配置好C编译工具:
1.1 在Ubuntu或Debian平台上可以使用sudo apt-get install gcc libc6-dev命令安装 , 树莓派的RaspBian系统是基于Debian修改的,所以可以使用这种方法安装 。
1.2 在RedHat或CentOS 6平台上可以使用sudo yum install gcc libc-devel命令安装 。
安装完成后可以输入 gcc --version命令验证是否成功安装 。
2、获取golang源代码
2.1 直接从官网下载源代码压缩包 。
golang官网提供golang的源代码压缩包,可以直接下载,最新的1.4.1版本源代码链接:
2.2 使用git工具获取 。
golang使用git版本管理工具,也可以使用git获取golang源代码 。推荐使用这个方法,因为以后可以随时获取最新的golang源代码 。
2.2.1 首先确认ARM平台上已经安装了git工具,可以使用git --version命令确认 。一般linux平台都安装了git,没有的话可以自行安装,不同平台的安装方法可以参考:
2.2.2 克隆远程golang的git仓库到本地
在终端cd到你想要安装golang的目录,确保该目录下没有名为go的目录 。然后以下命令获取代码仓库:
git clone
大陆地区可能会获取失败,在不翻墙的情况下我试了几次都没成功,原因大家都懂的 。好在google已经将golang也托管到github上面,所以也可以通过下面命令获?。?
git clone
视网络情况,下载可能需要不少时间 。我2M的带宽花了将近两个小时才下载完,虽然整个项目不过几十兆= =
下载完成后,可以看到目录下多了一个go目录,里面即为golang的源代码,在终端上执行cd go命令进入该目录 。
执行下面命令检出go1.4.1版本的源代码,因为现在已经有新的代码提交上去了,最新的代码可能不是最稳定的:
git checkout go1.4.1
至此,最新1.4.1发行版的源代码获取完毕
3、设置golang的编译环境变量
主要有GOROOT、GOOS、GOARCH、GOARM四个环境变量需要设置 , 先解释四个环境变量的意义 。
3.1 GOROOT
主要代表golang树结构目录的路径 , 也就是上面git检出的go目录 。一般可以不用设置这个环境变量,因为编译的时候默认会以go目录下src子目录中的all.bash脚本运行时的父目录作为GOROOT的值 。为了保险起见,可以直接设置为go目录的路径 。
3.2 GOOS和GOARCH
分别代表编译的目标系统和平台 , 可选值如下:
GOOSGOARCH
darwin386
darwinamd64
dragonfly386
dragonflyamd64
freebsd386
freebsdamd64
freebsdarm
linux386
linuxamd64
linuxarm
【树莓派go语言 go 树莓派】netbsd386
netbsdamd64
netbsdarm
openbsd386
openbsdamd64
plan9386
plan9amd64
solarisamd64
windows386
windowsamd64
需要注意的是这两个值代表的是目标系统和平台,而不是编译源代码的系统和平台 。树莓派的RaspBian是linux系统,所以这些GOOS设置为linux,GOARCH设置为arm 。
3.3 GOARM
表示使用的浮点运算协处理器版本号,只对arm平台有用 , 可选值有5,6,7 。如果是在目标平台上编译源代码 , 这个值可以不设置,它会自动判断需要使用哪一个版本 。
总结下来,在树莓派上设置golang的编译环境变量 , 可编辑$HOME/.bashrc文件,在末尾添加下面内容:
export GOROOT=你的go目录路径
export GOOS=linux
export GOARCH=arm
编辑完后保存,执行source ~/.bashrc命令让修改生效 。
4、编译源代码
环境变量配置完成自后就可以开始编译源代码 。在go目录下的src子目录中,主要有all.bash和make.bash两个脚本(另外还有两个all.bat和make.bat脚本适用于window平台) 。编译实际上就是执行其中一个脚本 , 两者的区别在于all.bash在编译完成后还会执行一些测试套件 。如果希望只编译不测试,可以运行make.bash脚本 。使用cd命令进入go下src目录,执行./all.bash或者./make.bash命令即可开始编译 。由于硬件情况不同 , 编译耗费的时间不同 。在我的B型树莓派编译过程花费了将近半个小时 , 编译完成后执行的测试套件又花费了差不多一个小时,总共花费了一个半小时左右 。
5、配置golang运行环境变量
编译完成后,go目录下会生成bin目录 , 里面就是go的运行脚本 。为了以后使用方法,可以将这个bin路径添加到PATH环境变量中 。同样编辑~/.bashrc文件 , 因为前面设置过GOROOT环境变量指向go目录了,所以只需要在末尾加上
export PATH=$PATH:$GOROOT/bin
保存后同样执行source ~/.bashrc命令让环境变量生效 。
至此,golang源代码编译安装成功 。执行go version应该就能看到当前golang的版本信息 , 表示编译安装成功 。
树莓派go语言的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于go 树莓派、树莓派go语言的信息别忘了在本站进行查找喔 。
推荐阅读
- 关于html5支持三种视频格式的信息
- 网络电视的水晶头怎么做,数字电视水晶头接法
- python下.gz文件,pythonzip
- 关于windows8以上系统的信息
- java云盘开源代码,java云计算开发
- 如何用js改变位置,js修改hover
- 沟通技巧在线直播,沟通技巧百度百科
- oracle怎么连接网络 oracle连接28547
- 无人机拍摄安卓手机软件,无人机拍摄安卓手机软件叫什么