windows 环境搭建

安装 g

这里还是推荐g这个 go 的多版本管理工具,类似 NodeJS 的 nvm,Python 的 virtualenv。

官网下载:

https://github.com/voidint/g/releases

将已下载的 g1.3.0.windows-amd64.zip 解压到一个安装目录,比如 D:\g\g.exe

配置环境变量

:如果之前安装、配置过 go,请先删除之前 path 中配置的 golang 变量

//g用于下载go安装包、安装go的目录
G_HOME=C:\Users\当前登录windows的用户目录\.g//g中配置的要使用的go版本的目录
GOROOT=%G_HOME%\go// 配置G_MIRROR
G_MIRROR=https://golang.google.cn/dl///配置g可执行文件g.exe、go可执行文件go.exe路径,这样可在全局,所有路径下执行g 或者 go 命令
PATH = %GOROOT%\bin;

下面是我环境变量中的配置(jyj34 是我当前登录 windows 的用户目录)

环境变量path

GOPATH这个环境变量的概念类似于 python 的虚拟环境。

常用命令:

//1. 查询可安裝的go stable版本
g ls-remote stable//2. 安装指定的go版本
g install 1.17.9//3. 查询本地已安装的go版本
g ls//4. 切换到一个已安装的go版本
g use 1.17.9//5. 查看go是否可用
go version//5.  查询可安裝的go 所有版本
g ls-remote//6. 卸载本地已安装指定的go 版本
g uninstall 1.15.7//7. 查看g可用命令
g help

这里 tinygo 不支持 go1.18,所以下载 1.17.9 就可以
g install 1.17.9

安装 goland

具体教程详见这篇文章

https://mp.weixin.qq.com/s/9Njj1U17nQscPqFLWZgDpQ

当 goland 安装好了,就在GOPATH创建三个下图文件夹,其中src是我们项目的工作地。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KWYBuJFz-1651308638727)(https://files.mdnice.com/user/14846/cf6c8eac-ba05-4652-bd50-9106ee880551.png)]

安装 arduino 与配置环境变量

下载 arduino ide

官网:

https://www.arduino.cc/en/software

建议安装到系统盘以外的盘,我是安装到 D 盘(D:\anconda)

配置环境 path

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TTLuFb2w-1651308638728)(https://files.mdnice.com/user/14846/94fa9b24-63f4-4ede-98cc-5c2f1a4cfb36.png)]

把上面两个添加到环境变量后,就说明整个 window 环境搭建好了。

例程

运行命令:

// port后面跟的是串口名字,这个需要到设备管理器中查看,这里的是COM5
tinygo flash -target arduino main.go -port COM5

运行信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oVS5g2rN-1651308638728)(https://files.mdnice.com/user/14846/5b92166c-c590-4b7b-8842-8e337350a8e7.png)]

内部 LED 灯控制

package mainimport ("machine""time"
)func main() {led := machine.LEDled.Configure(machine.PinConfig{Mode: machine.PinOutput})for {led.High()time.Sleep(time.Millisecond * 500)led.Low()time.Sleep(time.Millisecond * 500)}
}

闪烁

在这里,我们使用连接到引脚 13 的外部 LED。

请注意,引脚 13 没有内置电阻。管脚和 LED 之间应加一个 220 欧姆的电阻作为保护,否则 LED 可能会被较高的电压损坏。

package mainimport ("machine""time"
)func main() {led := machine.D13led.Configure(machine.PinConfig{Mode: machine.PinOutput})ledSwitch := truefor {led.Set(ledSwitch)ledSwitch = !ledSwitchdelay(500)}}func delay(t uint32) {time.Sleep(time.Duration(1000000 * t))
}

machine.LED 预定义在 machine 模块中,等于 machine.D13 。

使用 Goroutine 闪烁!

可以在 Arduino Uno 上运行 Goroutines(并发/并行线程)——而且也很容易。但是需要在上传脚本时启用调度程序:

命令:

tinygo flash -scheduler coroutines -target arduino main.go -port COMX

以下代码将以不同的间隔点亮引脚 2 和 3 上的两个 LED:(由于硬件限制,间隔时间会非常不准确。)

package mainimport ("machine""time"
)func main() {go led1() // goroutineled2()
}func led1() {led := machine.D2led.Configure(machine.PinConfig{Mode: machine.PinOutput})for {led.High()delay(500)led.Low()delay(500)}
}func led2() {led := machine.D3led.Configure(machine.PinConfig{Mode: machine.PinOutput})for {led.High()delay(400)led.Low()delay(400)}
}func delay(t int64) {time.Sleep(time.Duration(1000000 * t))
}

甚至可以将这两个函数都作为 Goroutines。为此,在 main() (它实际上是一个 Goroutine 本身)的末尾需要一个小的延迟:

func main() {go led1()go led2()delay(100)
}

LED 阵列(简单版)

现在,我们将让一排 9 个 LED 一个一个地闪烁,朝向一样然后返回。使用引脚 2-10。

package mainimport ("machine""time"
)func main() {leds := []machine.Pin{machine.D2,machine.D3,machine.D4,machine.D5,machine.D6,machine.D7,machine.D8,}for i := 0; i < len(leds); i++ {leds[i].Configure(machine.PinConfig{Mode: machine.PinOutput}})}for {for i := 0; i < len(leds); i++ {leds[i].High()delay(75)leds[i].Low()}for i := len(leds) - 1; i >= 0; i-- {leds[i].High()delay(75)leds[i].Low()}}
}func delay(t uint16) {time.Sleep(time.Duration(1000000 * uint32(t)))
}

LED 阵列(进阶版)

package mainimport ("machine""time"
)func main() {delay := func(t uint16) {time.Sleep(time.Duration(1000000 * uint32(t)))}leds := []machine.Pin{machine.D2,machine.D3,machine.D4,machine.D5,machine.D6,machine.D7,machine.D8,}for _, led := range leds {led.Configure(machine.PinConfig{Mode: machine.PinOutput})}index, delta := 0, 1for {for i, led := range leds {led.Set(i == index)}index += deltaif index == 0 || index == len(leds)-1 {delta *= -1}delay(75)}
}

:LED 结构的 Set()方法接受一个布尔参数(真/假)。在 Go 中,不能将 int 转换为 bool;必须使用逻辑运算符。

按键:数字输入

引脚也可用于读取数字信号(高/低电压)。在这里,我们将使用引脚 8 上的按钮(或开关)来打开/关闭引脚 13 上的 LED。

为了在高/低状态之间切换,按钮需要一个 10K 欧姆的上拉电阻。

package mainimport ("machine""time"
)func main() {button := machine.D2button.Configure(machine.PinConfig{Mode: machine.PinInput})led := machine.D9led.Configure(machine.PinConfig{Mode: machine.PinOutput})for {led.Set(!button.Get())time.Sleep(time.Millisecond * 100)}
}

: Get()方法返回一个布尔值(真/假)。还可以使用内部上拉电阻,它允许您仅使用 2 根线(signal/ground)来连接按钮:

button := machine.D2
button.Configure(machine.PinConfig{Mode: machine.PinInputPullup})

PWM

在 Uno(和 Nano)上,只有引脚 3、5、6、9、10 和 11(旁边带有~标记)可用于输出 PWM。

这个例子使引脚 9 上的 LED “呼吸” - 逐渐亮起和消失,电路与闪烁代码相同。

package mainimport ("machine""time"
)func main() {machine.InitPWM()led := machine.PWM{machine.D9}led.Configure()duty, delta := 0, 1024for {led.Set(uint16(duty))duty += deltaif duty < 0 || duty > 65535 {delta *= -1duty += delta}time.Sleep(time.Millisecond * 25)}
}

PWM 的Set()方法接受一个 uint16 参数 (0-65535),即 PWM占空比。

传感器:模拟输入

Arduino Uno 上的一些引脚具有 ADC(模数转换器),允许它们将电压读取为数字。

在这里,我们使用 LDR(光敏电阻)根据光照水平将模拟读数输出到引脚 A0,并打开/关闭引脚 13 上的 LED。为了读取电压的变化,我们需要一个 10K的分压器电路欧姆电阻。

mackage mainimport ("machine""time"
)func main() {machine.InitADC()ldr := machine.ADC{machine.ADC0}ldr.Configure()led := machine.Pin(machine.D9)led.Configure(machine.PinConfig{Mode: machine.PinOutput})for {print(ldr.Get())if ldr.Get() > 40000 {led.Set(true)} else {led.Set(false)}time.Sleep(time.Millisecond * 100)}
}

这里我将阈值设置为 40000。实际阈值可能会根据您的照明条件而有所不同。您可以使用终端软件(如Tera Term或 Arduino IDE 的串行监视器)从print()读取输出值。

END

好了,下期再见!!!

tinygo的windows环境搭建及简单例程相关推荐

  1. 高通平台上的AMSS(Modem端) windows环境搭建

    高通平台上的AMSS(Modeom端)Windows环境搭建 一.首先简单介绍一下,高通平台7&8系列平台的软硬件架构. 如图: 硬件上采用的是ARM9+ARM11(最新的采用Cotex-A8 ...

  2. Windows环境搭建WeGame饥荒专用服务器(详细版)

    Windows环境搭建WeGame饥荒专用服务器 前言 饥荒专用服务器 获取cluster_token令牌 注册许可证书 文件配置 路径配置 根目录 cluster.ini文件配置 地面服务器(Mas ...

  3. Windows环境搭建 Gitlab 服务器

    Windows环境搭建 Gitlab 服务器 01 背景 新公司测试部门目前没有专门的代码管理工具,出于管理方便,我在 Window10上搭建了Git 服务器,用于日常各项目自动化脚本的管理. 02 ...

  4. 8、Hive数据仓库——环境搭建及简单使用

    文章目录 Hive数据仓库--环境搭建及简单使用 Hive的安装和使用 一.Linux的JDK的安装 (已经安装过JDK可以跳过此步骤) 二.离线安装MySQL(已经安装过MySQL可以跳过此步骤) ...

  5. 高通平台上的AMSS(Modeom端)Windows环境搭建

    高通平台上的AMSS(Modeom端)Windows环境搭建 一.主要介绍如何建立AMSS代码的编译环境 编译AMSS的source有两种方式:一是在windows下编译 ,另一是在linux下编译. ...

  6. windows环境搭建web服务器(IIS)

    windows环境下如何搭建web服务器,百度或者谷歌一下都会有很多教程和资源可以参考.这里我也记载一下过程,便于大家参考.至于什么是web服务器,为什么需要web服务器,这里不太明白的也可以百度一下 ...

  7. Kafka单机Windows环境搭建

    Kafka单机Windows环境搭建 1,安装jdk1.8:安装目录不能有中文空格: 2,下载zookeeper,https://mirrors.cnnic.cn/apache/zookeeper/z ...

  8. 转载 jsonrpc环境搭建和简单实例

    jsonrpc环境搭建和简单实例 一.环境准备 下载需要的jar包和js文件,下载地址:https://yunpan.cn/cxvbm9DhK9tDq  访问密码 6a50 二.新建一个web工程,j ...

  9. JAVA JDK windows环境搭建

    JAVA JDK windows环境搭建 系统环境: windows 10 , JDK 1.7 操作步骤: 1.下载JDK,全部选择默认,直接点击下一步 2.配置环境变量 打开环境变量 变量设置 JA ...

最新文章

  1. Java 洛谷 提交完题目的代码之后一直停留在 ( 正在等待编译……),刷新页面之后 ,显示 Unaccepted 0分
  2. SAP Spartacus里解析route参数的逻辑
  3. keras训练完以后怎么预测_还在使用“龟速”的单显卡训练模型?动动手,让TPU节省你的时间...
  4. 手把手教你写DI_3_小白徒手支持 Singleton 和 Scoped 生命周期
  5. 使用EasyMock或Mockito
  6. android 仿携程选择城市,类似携程商旅的城市选择器 CityPicker
  7. !!超级筹码理论总结
  8. 自然语言处理真实项目实战(20170822)
  9. OpenCV-Python实战(11)——OpenCV轮廓检测相关应用
  10. 4、那智机器人显示画面的构成和含义
  11. 爬楼梯算法的数学思路
  12. F.dropout()与nn.dropout()
  13. 根据IP统计网站访问次数
  14. 一种快速求解最大团问题的算法
  15. 从这里,开始屌丝的逆袭
  16. Unity 如何实现苹果动态模糊遮罩
  17. 计算机c盘应该装什么区别,电脑的c盘和d盘有什么区别吗
  18. 关于HTML图片如何设置热区
  19. 实现黑客帝国数字雨效果
  20. html 页面右侧浮窗 CSS,CSS实现广告右侧悬浮效果

热门文章

  1. INDEMIND带你玩转OpenCV4.0(一):DIS光流算法解析
  2. MMC 开发浅谈 - 准备篇(学习资料与配置环境)
  3. BTC 复制节点(节点复制)复制区块数据,实现快速同步区块数据
  4. 小程序----个人中心页面
  5. SAP High Avaliability offering
  6. 自动驾驶专题介绍 ———— 转向系统
  7. PM,RD,FE,UE,UI,QA等开发常见部门简称
  8. 武汉大学计算机学院参考书,武汉大学计算机应用技术研究生考试科目和考研参考书目...
  9. python tensorflow教程_真正从零开始,TensorFlow详细安装入门图文教程!
  10. 介绍理想工作计算机 英语作文,理想工作的英语作文7篇