Arduino Create Agent JS CLIENT使用方法

Arduino Create Agent JS CLIENT how to use

欢迎光临, 目前,我想使用 JavaScript (NodeJS) 将代码上传到 Arduino, 我讨厌使用 FIRMATA 上传代码, 我想用官方的Arduino create agentArduino create agent js client

https://github.com/arduino/arduino-create-agent-js-client

我只是 downloaded arduino 创建代理, 我运行以下在空目录

git clone https://github.com/arduino/arduino-create-agent-js-client.git

我在 COM7 中插入了 arduino nano(旧的引导加载程序), 因此我将文件.\demo\app.jsx第189-205行更改(编辑)为

handleUpload() {
    const target = {
      board: 'arduino:avr:nano',
      port: 'COM7',
      network: false
    };

    this.setState({ uploadingPort: target.port });
    daemon.boardPortAfterUpload.subscribe(portStatus => {
      if (portStatus.hasChanged) {
        this.setState({ uploadingPort: portStatus.newPort });
      }
    });

    // Upload a compiled sketch.
    daemon.uploadSerial(target, 'serial_mirror', { bin: HEX });
  }

然后我运行

npm run dev

因为本地主机 运行s 在 http://localhost:8000/ 我编辑了配置文件

C:\Users\USER\AppData\Roaming\ArduinoCreateAgent\config.ini

并设置 origins = http://localhost:8000

gc = std  # Type of garbage collection. std = Normal garbage collection allowing system to decide (this has been known to cause a stop the world in the middle of a CNC job which can cause lost responses from the CNC controller and thus stalled jobs. use max instead to solve.), off = let memory grow unbounded (you have to send in the gc command manually to garbage collect or you will run out of RAM eventually), max = Force garbage collection on each recv or send on a serial port (this minimizes stop the world events and thus lost serial responses, but increases CPU usage)
hostname = unknown-hostname  # Override the hostname we get from the OS
regex = usb|acm|com  # Regular expression to filter serial port list
v = true  # show debug logging
appName = CreateAgent/Stable
updateUrl = https://downloads.arduino.cc/
origins = http://localhost:8000 #this is where I have setted
#httpProxy = http://your.proxy:port # Proxy server for HTTP requests
crashreport = false # enable crashreport logging

如上图继续上传

请帮忙

有几个步骤可以让这个工作:

  • 安装 Arduino Create Agent
  • 修改config.ini文件设置origins = http://localhost:8000
  • demo\app.jsx
  • 中更新目标板和端口
  • demo\serial_mirror.js
  • 替换草图下载到板子
  • 通过在您的浏览器中禁用 CORS,允许演示应用到达 builder.arduino.cc

您已经完成了前两个、第三个的一部分和最后两个的 none。

确定目标板

完全合格的电路板名称 (FQBN) 需要在 demo\app.jsx 中更新。 FQBN 可以从 Arduino 应用程序的编译输出 window 中获取。当您构建草图时,Arduino 应用程序中的输出 window 将包含一个 -fqbn 参数。例如-fqbn=arduino:avr:nano:cpu=atmega328

= 之后复制此 FQBN 并更新目标对象的板 属性 以及您的板的端口。

例如

    const target = {
      board: 'arduino:avr:nano:cpu=atmega328',
      port: 'COM7',
      network: false
    };

替换草图

演示应用程序硬编码要在 serial_mirror.js

中下载的草图

这可以通过从 Arduino 应用程序导出编译后的二进制文件来替换为所需的草图。请参见下面的屏幕截图。导出的二进制文件保存到sketch文件夹(“Sketch”菜单上的“Show Sketch folder”会显示这个文件夹)。请注意,草图必须是可写的(例如,示例草图不会在此草图文件夹中生成二进制文件)。

导出的二进制文件需要进行 base 64 编码。导出的二进制文件将具有您正在使用的 hexbin 扩展名 depending on the type of board。例如对于 avr 板,转换 sketch 文件夹中名为 <sketch>.ino.with_bootloader.standard.hex 的文件。

您可以在 WSL(Windows Linux 的子系统)中使用以下命令转换二进制文件:

base64 -w 0 sketch.ino.with_bootloader.standard.hex > exported.sketch.b64

或者,使用 powershell:

[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes("c:\<path to sketch.ino.with_bootloader.standard.hex>")) | Set-Content -Path "C:\<path to exported.sketch.b64>"

demo\serial_mirror.js 中的字符串需要替换为新草图的 base 64 字符串。即

export const HEX = '<string from exported.sketch.b64>';

在浏览器中禁用 CORS

浏览器中的开发人员控制台在尝试上传草图时显示 CORS 错误。

您可以通过启动浏览器的单独实例来暂时禁用此安全检查。例如使用 --disable-web-security 标志开始 Chrome:

"c:\Program Files\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir=c:\windows\temp

演示应用随后可以上传草图而不会出现任何 CORS 错误。

请参阅此 other SO answer 以了解失败原因的概述。

应用程序需要对 builder.arduino.cc 的请求失败,以确定在对板进行编程时要使用的命令行和工具签名。

陷阱

您将需要关闭任何其他使用 COM 端口的应用程序并强制您的 Arduino 进入编程模式(如有必要,按下开发板上的编程按钮)。