peanut 发表于 2013-4-14 16:11:11

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留言。

txmg 发表于 2013-4-14 16:46:33

使用以太网的时候编译出错。。。

peanut 发表于 2013-4-14 18:49:21

本帖最后由 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 22:19:55

本帖最后由 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> 编译就没问题了。

wing 发表于 2013-4-15 11:04:50

我总觉得python写的东西比java的还要慢,不知道是不是错觉呢?

peanut 发表于 2013-4-15 11:16:40

Sublime Text不是用Python写的(可能是用C或C++写的),它支持用python写插件来扩展功能。所以用Sublime Text比Arduino IDE快多了。插件不是编辑器核心功能,不影响编辑器的性能。还有Python底层库都是C写的,一般功能的运行效率很高了。Arduino IDE在没有JAVA的环境下不能用,如SLAX(www.slax.org),用Sublime Text就没问题。

txmg 发表于 2013-4-15 12:57:59

#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*)'


peanut 发表于 2013-4-15 13:38:45

连接错误,选择完全编译(菜单中: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%)。

txmg 发表于 2013-4-15 15:26:44

peanut 发表于 2013-4-15 13:38 static/image/common/back.gif
连接错误,选择完全编译(菜单中:Arduino->设置->完全编译),把Arduino和库都重新编译一次。

Arduino...

解决了!重新建个文件就好了!

maxiujun 发表于 2013-4-15 16:05:35

以前一直苦于inotools的不更新,现在st + ino就牛气了,安装还方便。
现在在mac上的,各位linux上一样简单吗?

peanut 发表于 2013-4-15 16:22:25

Windows, Linux和Mac上使用基本一样,Stino是基于Sublime Text的,只要ST在这三个系统上表现一样,插件使用就没区别。

maxiujun 发表于 2013-4-15 16:43:14

毕竟是依赖arduino ide的,这几个系统上arduino ide的差异较大。

maxiujun 发表于 2013-4-15 16:46:37

另外怎么才能模式直接打开arduino menu呢。?

peanut 发表于 2013-4-15 17:17:30

本帖最后由 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,菜单会出来,编辑其它类型的文件,菜单就隐去。

maxiujun 发表于 2013-4-15 18:21:33

按你说的,实际上还是依赖arduino ide中的一些文件的。
在mac里面他只会使用Arduino.app下的编译器和头文件,想干掉arduino ide都不行,虽然我已经单独brew安装了avr-gcc,avrdude,等一些工具。
不过已经非常先进了,终于可以从arduino ide中解脱了。
页: [1] 2 3 4
查看完整版本: Stino - 用Sublime Text作为Arduino开发环境