zhangguanzhang's Blog

gobot控制esp8266

字数统计: 907阅读时长: 3 min
2019/08/24

材料

gobot官网是Arduino的demo,官网上看了下支持esp8266,整好之前整wifi攻击器的时候有就玩了下。我是在windows编译的,没有8266的话自己去淘宝上一块儿node-mcu+数据线(本质上就是个带串口和排针的esp8266-12,买驱动是CH340G的,就是usb口旁边有个长条形ic,方的是cp2102不稳定会导致windows蓝屏)

环境搭建

用goland写代码,不推荐vscode写golang,自行安装golang(记得设置好环境变量)和goland,现在golang最新版本是12.9
整个demo分为两部分,客户端gobot去设置和控制esp8266,8266是烧录好firmata的固件。firmata有写好的支持的硬件开发板的各种协议驱动:i2c,蓝牙,tcp,串口。gobot通过参数向硬件端发送行为和获取数据,硬件端来初始化gpio去驱动硬件模块儿

8266固件

需要Arduino IDE来编辑和编译以及下载

Arduino IDE准备

官网下载,目前最新的是1.8.9,我下载的是免安装的,打开后

  • 文件首选项附加开发板管理器网址–粘贴http://arduino.esp8266.com/stable/package_esp8266com_index.json,

  • 工具开发板开发板管理器–此时会下载上面的json(需要梯子),在搜索框里输入esp8266安装
    board-esp8266.jpg

  • 工具管理库开发板管理器–在搜索框里输入firmata安装
    board-firmata.jpg

  • 打开网页 http://firmatabuilder.com/ ,因为8266是个wifi模块儿,这里链接类型和使能的驱动为下图这些,如果想把ip固定住在局域网内使用可以写上ip
    web-firmata.jpg

  • 网页上移动到最下面输入文件名点击下载,解压后得到一个ino的Arduino IDE项目文件,用Arduino IDE打开它,然后在工具开发板里选择Node MCU 1.0

  • 安装CH340驱动,https://sparks.gogo.co.nz/ch340.html 点击Download the Windows CH340 Driver下载解压了以管理员身份运行,记得关闭windows的自带的那个def啥安全再安装

  • 硬件插上usb口后等待windows弹出的驱动文件正在安装完成消失后,在ide里工具端口里选择正确的COM口

  • 代码修改:

    1
    2
    3
    4
    5
    #define SERIAL_DEBUG  //取消注释
    char wpa_passphrase[] = "xxxxx"; 自己附近的wifi密码和ssid名字
    // 下面两行加在`void printWiFiStatus()`函数的` DEBUG_PRINTLN(ip);`下面
    DEBUG_PRINT("Local Port: ");
    DEBUG_PRINTLN(NETWORK_PORT);
  • 点击项目上传,下面出现Hard press RST啥的就可以打开串口下载软件然后按下8266板子上的rst重启,在串口软件里就可以看到输出信息了
    board-uart.jpg

golang代码

goland新加项目选中go module,proxy写个代理地址,例如: https://mirrors.aliyun.com/goproxy/、https://goproxy.io、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main

import (
"os"
"time"

"gobot.io/x/gobot"
"gobot.io/x/gobot/drivers/gpio"
"gobot.io/x/gobot/platforms/firmata"
)

func main() {
firmataAdaptor := firmata.NewTCPAdaptor(os.Args[1])
led := gpio.NewLedDriver(firmataAdaptor, "2")

work := func() {
gobot.Every(1*time.Second, func() {
led.Toggle()
})
}

robot := gobot.NewRobot("bot",
[]gobot.Connection{firmataAdaptor},
[]gobot.Device{led},
work,
)

robot.Start()
}

自行编译,arg1为板子的ip:port
运行的输出

1
2
3
4
5
6
7
8
9
10
11
12
C:\Users\guanzhang\go\src\test>test.exe 192.168.123.74:3030
2019/08/24 18:00:07 Initializing connections...
2019/08/24 18:00:07 Initializing connection TCPFirmata-F4AF098BF1E8FBB ...
2019/08/24 18:00:07 Initializing devices...
2019/08/24 18:00:07 Initializing device LED-347A1A3D3308A707 ...
2019/08/24 18:00:07 Robot bot initialized.
2019/08/24 18:00:07 Starting Robot bot ...
2019/08/24 18:00:07 Starting connections...
2019/08/24 18:00:07 Starting connection TCPFirmata-F4AF098BF1E8FBB on port 192.168.123.74:3030...
2019/08/24 18:00:07 Starting devices...
2019/08/24 18:00:07 Starting device LED-347A1A3D3308A707 on pin 2...
2019/08/24 18:00:07 Starting work...

我们可以看到灯在一秒一闪

参考

CATALOG
  1. 1. 材料
  2. 2. 环境搭建
    1. 2.1. 8266固件
      1. 2.1.1. Arduino IDE准备
      2. 2.1.2. golang代码
  3. 3. 参考