Stino - 用Sublime Text作为Arduino开发环境
本帖最后由 peanut 于 2017-4-12 16:52 编辑Stino是Sublime Text的插件,使Sublime Text能够像Arduino IDE一样进行编辑、编译和下载程序,具有多语言界面,使用像Arduino IDE一样简单,但是编辑功能很强大。Stino使用纯Python写成,能够运行在Windows, Mac OS X和Linux上。
使用需求:
1. Sunlime Text 2
当前版本的Stino还不支持Sublime Text 3,请使用Sublime Text 2。
2. Arduino
Stino支持Arduino 0017以后的版本,并且支持非标准Arduino核心,例如Teensy。
安装:
Stino能够通过Sublime Text Package Control或者手动安装。
1. 通过Sublime Text Package Control安装
1) 打开Sublime Text 2 Package Control Installation页面,复制Sublime Text Package Control安装命令。
2) 用Ctrl+`快捷键打开Sublime Text 2控制台,将安装命令粘贴到控制台中。
3) 安装完成,可以看到提示信息'Please restart Sublime Text to finish installation'。
4) 重启Sublime Text 2, 点击菜单Preferences -> Package Control。
5) 输入 package control install并选择 Package Control: Install Package。
6) 输入 arduino 并选择 Arduino-like IDE。
2. 手动安装
1) 下载Stino 并解压。
2) 点击菜单Preferences -> Browse Packages... 。
3) 将解压后的目录复制到Sublime Text的Packages目录中。
3. 设置Arduino目录
1) 点击菜单 Preferences -> 显示Arduino菜单,出现Arduino菜单。
2) 点击菜单 Arduino -> 设置 -> 选择Arduino目录。
3) 选择Arduino所在的目录。
4. 编译和下载程序
点击菜单 Arduino -> 验证/编译 和 Arduino -> 下载 来编译程序和下载程序。
5. 串口监视器
6. 参数设置
如果你同时在用多个板子写程序,你可以为每个程序设置不同的参数,而不用总是在换参数。
7. 遇到问题
如果使用中遇到了问题,你可以到 Issues留言。
使用以太网的时候编译出错。。。 本帖最后由 peanut 于 2013-4-14 22:04 编辑
Arduino 1.0.4 Webserver例子
收集编译信息...
编译程序中...
清理目标文件...
创建E:/Documents/Arduino_Build/WebServer/WebServer.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/CDC.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/HardwareSerial.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/HID.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/IPAddress.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/main.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/malloc.c.o...
创建E:/Documents/Arduino_Build/WebServer/new.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/Print.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/Stream.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/Tone.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/USBCore.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/WInterrupts.c.o...
创建E:/Documents/Arduino_Build/WebServer/wiring.c.o...
创建E:/Documents/Arduino_Build/WebServer/wiring_analog.c.o...
创建E:/Documents/Arduino_Build/WebServer/wiring_digital.c.o...
创建E:/Documents/Arduino_Build/WebServer/wiring_pulse.c.o...
创建E:/Documents/Arduino_Build/WebServer/wiring_shift.c.o...
创建E:/Documents/Arduino_Build/WebServer/WMath.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/WString.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/Dhcp.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/Dns.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/Ethernet.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/EthernetClient.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/EthernetServer.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/EthernetUdp.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/socket.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/w5100.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/SPI.cpp.o...
创建E:/Documents/Arduino_Build/WebServer/core.a...
创建E:/Documents/Arduino_Build/WebServer/WebServer.elf...
创建E:/Documents/Arduino_Build/WebServer/WebServer.eep...
创建E:/Documents/Arduino_Build/WebServer/WebServer.hex...
二进制程序大小:11,880字节(最大32,256字节, 36.83%).
预计内存使用:577字节(最大1,024字节,56.35%)。
Arduino 1.5.2 ChatServer例子
收集编译信息...
编译程序中...
清理目标文件...
创建E:/Documents/Arduino_Build/ChatServer/ChatServer.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/CDC.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/HardwareSerial.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/HID.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/hooks.c.o...
创建E:/Documents/Arduino_Build/ChatServer/IPAddress.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/main.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/malloc.c.o...
创建E:/Documents/Arduino_Build/ChatServer/new.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/Print.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/Stream.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/Tone.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/USBCore.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/WInterrupts.c.o...
创建E:/Documents/Arduino_Build/ChatServer/wiring.c.o...
创建E:/Documents/Arduino_Build/ChatServer/wiring_analog.c.o...
创建E:/Documents/Arduino_Build/ChatServer/wiring_digital.c.o...
创建E:/Documents/Arduino_Build/ChatServer/wiring_pulse.c.o...
创建E:/Documents/Arduino_Build/ChatServer/wiring_shift.c.o...
创建E:/Documents/Arduino_Build/ChatServer/WMath.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/WString.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/Dhcp.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/Dns.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/Ethernet.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/EthernetClient.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/EthernetServer.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/EthernetUdp.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/socket.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/w5100.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/SPI.cpp.o...
创建E:/Documents/Arduino_Build/ChatServer/core.a...
创建E:/Documents/Arduino_Build/ChatServer/ChatServer.elf...
创建E:/Documents/Arduino_Build/ChatServer/ChatServer.eep...
创建E:/Documents/Arduino_Build/ChatServer/ChatServer.hex...
二进制程序大小:11,138字节(最大32,256字节, 34.53%).
预计内存使用:448字节(最大1,024字节,43.75%)。
本帖最后由 peanut 于 2013-4-14 23:05 编辑
使用Ethernet库的时候,可能会出现编译错误:
创建E:/Documents/Arduino_Build/Blink/w5100.cpp.o...
G:\creative\arduino-1.5.2\hardware\arduino\avr\libraries\Ethernet\utility\w5100.cpp: In member function 'void W5100Class::init()':
G:\creative\arduino-1.5.2\hardware\arduino\avr\libraries\Ethernet\utility\w5100.cpp:28: error: 'delay' was not declared in this scope
G:\creative\arduino-1.5.2\hardware\arduino\avr\libraries\Ethernet\utility\w5100.cpp:30: error: 'SPI' was not declared in this scope
G:\creative\arduino-1.5.2\hardware\arduino\avr\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint8_t W5100Class::write(uint16_t, uint8_t)':
G:\creative\arduino-1.5.2\hardware\arduino\avr\libraries\Ethernet\utility\w5100.cpp:133: error: 'SPI' was not declared in this scope
G:\creative\arduino-1.5.2\hardware\arduino\avr\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint16_t W5100Class::write(uint16_t, const uint8_t*, uint16_t)':
G:\creative\arduino-1.5.2\hardware\arduino\avr\libraries\Ethernet\utility\w5100.cpp:146: error: 'SPI' was not declared in this scope
G:\creative\arduino-1.5.2\hardware\arduino\avr\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint8_t W5100Class::read(uint16_t)':
G:\creative\arduino-1.5.2\hardware\arduino\avr\libraries\Ethernet\utility\w5100.cpp:159: error: 'SPI' was not declared in this scope
G:\creative\arduino-1.5.2\hardware\arduino\avr\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint16_t W5100Class::read(uint16_t, uint8_t*, uint16_t)':
G:\creative\arduino-1.5.2\hardware\arduino\avr\libraries\Ethernet\utility\w5100.cpp:172: error: 'SPI' was not declared in this scope
加入 #include <SPI.h> 编译就没问题了。 我总觉得python写的东西比java的还要慢,不知道是不是错觉呢? Sublime Text不是用Python写的(可能是用C或C++写的),它支持用python写插件来扩展功能。所以用Sublime Text比Arduino IDE快多了。插件不是编辑器核心功能,不影响编辑器的性能。还有Python底层库都是C写的,一般功能的运行效率很高了。Arduino IDE在没有JAVA的环境下不能用,如SLAX(www.slax.org),用Sublime Text就没问题。 #include <EtherCard.h>
static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x00,0x01};
char website[] PROGMEM = "nupttemp.duapp.com";
int j;
const char *T;
byte Ethernet::buffer;
static uint32_t timer;
int i=0;
char q="api.php?access_token=&status=from+arduino+擦!真的支持中文,我很长!";
static void response_callback (byte status, word off, word len) {
Serial.print((const char*) Ethernet::buffer + off);
}
void setup () {
Serial.begin(9600);
Serial.println("Client Demo");
Serial.println();
if (!ether.begin(sizeof Ethernet::buffer, mymac, 10))
Serial.println( "Failed to access Ethernet controller");
else
Serial.println("Ethernet controller initialized");
Serial.println();
if (!ether.dhcpSetup())
Serial.println("Failed to get configuration from DHCP");
else
Serial.println("DHCP configuration done");
ether.printIp("IP Address:\t", ether.myip);
ether.printIp("Netmask:\t", ether.mymask);
ether.printIp("Gateway:\t", ether.gwip);
Serial.println();
if (!ether.dnsLookup(website))
Serial.println("DNS failed");
else
Serial.println("DNS resolution done");
ether.printIp("SRV IP:\t", ether.hisip);
Serial.println();
}
void loop() {
ether.packetLoop(ether.packetReceive());
if (millis() > timer) {
timer = millis() + 20000;
ether.browseUrl(PSTR("/"), q, website, response_callback);
Serial.println(q);
}
}
这个同样的代码!在arduino 1.0.1下可以通过!但是subline出错
收集编译信息...
编译程序中...
清理目标文件...
创建C:/Users/txmg/Documents/Arduino_Build/AnalogReadSerial/AnalogReadSerial.cpp.o...
创建C:/Users/txmg/Documents/Arduino_Build/AnalogReadSerial/AnalogReadSerial.elf...
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial\AnalogReadSerial.cpp.o: In function `loop':
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:51: undefined reference to `ENC28J60::packetReceive()'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:51: undefined reference to `EtherCard::packetLoop(unsigned int)'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:54: undefined reference to `EtherCard::browseUrl(char*, char const*, char*, void (*)(unsigned char, unsigned int, unsigned int))'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial\AnalogReadSerial.cpp.o: In function `setup':
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:26: undefined reference to `EtherCard::begin(unsigned int, unsigned char const*, unsigned char)'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:32: undefined reference to `EtherCard::dhcpSetup()'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:37: undefined reference to `EtherCard::myip'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:37: undefined reference to `EtherCard::myip'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:37: undefined reference to `EtherCard::printIp(char const*, unsigned char const*)'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:38: undefined reference to `EtherCard::mymask'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:38: undefined reference to `EtherCard::mymask'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:38: undefined reference to `EtherCard::printIp(char const*, unsigned char const*)'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:39: undefined reference to `EtherCard::gwip'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:39: undefined reference to `EtherCard::gwip'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:39: undefined reference to `EtherCard::printIp(char const*, unsigned char const*)'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:42: undefined reference to `EtherCard::dnsLookup(char*, bool)'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:46: undefined reference to `EtherCard::hisip'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:46: undefined reference to `EtherCard::hisip'
C:\Users\txmg\Documents\Arduino_Build\AnalogReadSerial/AnalogReadSerial.cpp:46: undefined reference to `EtherCard::printIp(char const*, unsigned char const*)'
连接错误,选择完全编译(菜单中:Arduino->设置->完全编译),把Arduino和库都重新编译一次。
Arduino 1.0.1~Arduino 1.0.4都没问题。
收集编译信息...
编译程序中...
清理目标文件...
创建E:/Documents/Arduino_Build/AnalogReadSerial/AnalogReadSerial.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/CDC.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/HardwareSerial.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/HID.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/IPAddress.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/main.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/new.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/Print.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/Stream.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/Tone.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/USBCore.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/WInterrupts.c.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/wiring.c.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/wiring_analog.c.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/wiring_digital.c.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/wiring_pulse.c.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/wiring_shift.c.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/WMath.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/WString.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/dhcp.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/dns.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/enc28j60.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/EtherCard.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/tcpip.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/udpserver.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/webutil.cpp.o...
创建E:/Documents/Arduino_Build/AnalogReadSerial/core.a...
创建E:/Documents/Arduino_Build/AnalogReadSerial/AnalogReadSerial.elf...
创建E:/Documents/Arduino_Build/AnalogReadSerial/AnalogReadSerial.eep...
创建E:/Documents/Arduino_Build/AnalogReadSerial/AnalogReadSerial.hex...
二进制程序大小:12,892字节(最大258,048字节, 5.00%).
预计内存使用:2,040字节(最大8,196字节,24.89%)。
peanut 发表于 2013-4-15 13:38 static/image/common/back.gif
连接错误,选择完全编译(菜单中:Arduino->设置->完全编译),把Arduino和库都重新编译一次。
Arduino...
解决了!重新建个文件就好了! 以前一直苦于inotools的不更新,现在st + ino就牛气了,安装还方便。
现在在mac上的,各位linux上一样简单吗? Windows, Linux和Mac上使用基本一样,Stino是基于Sublime Text的,只要ST在这三个系统上表现一样,插件使用就没区别。 毕竟是依赖arduino ide的,这几个系统上arduino ide的差异较大。 另外怎么才能模式直接打开arduino menu呢。? 本帖最后由 peanut 于 2013-4-15 17:19 编辑
Stino不依赖Arduino IDE,完全可以把Arduino IDE的编辑器删除(JAVA, lib和tools目录,和根目录下arduino.exe等文件删除,不过lib/version.txt写了版本号,Stino要来读这个文件)。Arduino的核心是hardware/arduino/目录下的东西,最核心就是hardware/arduino/cores/arduino/目录下的源文件。整个核心容量很小,并且平台无关,Win/MAc/linux下都一样。编译是用hardware/tools下的avr-gcc或arm-gcc工具链,这个是平台相关的,不同平台下Arduino容量不同主要是因为工具链在不同平台上的容量不一样。如果你想用自己安装的工具链,你可以把tools里的gcc删除,Stino会找系统里默认的gcc来编译。
因为ST是个通用的编辑器,也许并不是一直拿来写Arduino程序的,所以Stino监视正在编辑的文件,若文件扩展名为.ino, .pde, .c, .cc, .cpp, .cxx,菜单会出来,编辑其它类型的文件,菜单就隐去。 按你说的,实际上还是依赖arduino ide中的一些文件的。
在mac里面他只会使用Arduino.app下的编译器和头文件,想干掉arduino ide都不行,虽然我已经单独brew安装了avr-gcc,avrdude,等一些工具。
不过已经非常先进了,终于可以从arduino ide中解脱了。