在Arduino上用Java编程
1.序
2.TotoroVM使用方法
3.通过Eclipse开发Arduino程序
Eclipse是广受欢迎的程序开发环境,支持Java,C等多种程序语言,由于他优秀的插件机制和成熟的社区支撑,有着近乎无限的可能性。用惯了Eclipse的语法提示的我,对于Arduino自带的IDE实在是不能适应。通过Eclipse开发Arduino程序,自然也是要通过插件的支持,而这个插件名叫AVR Eclipse Plugin,它不但可以编写,编译Arduino程序,还支持一键烧录的功能。下面,让我们来一步一步搭建一个支持Arduino的Eclipse。
第一步,Eclipse:
去到Eclipse的官网的下载页面 http://www.eclipse.org/downloads/ 找到最新版的 Eclipse IDE for C/C++ Developper,下载需要的32/64位版本。http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/juno/SR2/eclipse-cpp-juno-SR2-win32.zip
有了Eclipse IDE for C/C++之后还可以安装一个mingw或者cygwin,两者都有gcc可以编译出windows下的执行文件,区别是mingw编译出来的文件可以直接执行,而cygwin编译出来的文件比较小,但需要有一个cygwin1.dll支持。装他们的目的是为了调试为Arduino写的C++程序(需要自己实现一些调试用的Arduino.h中的方法),以弥补Arduino芯片上难于调试程序的尴尬。
我使用的的mingw,下载安装包 http://sourceforge.net/projects/mingw/files/latest/download?source=files 安装好后,将<MingGW>\bin目录加到path中,启动Eclipse后会自动实别。然后就可以在新建C/C++项目中选择MinGW GCC,初次使用可以选择 New->C++ Project->Executable->Hello World C++ Project,在Toolchains中选择MinGW GCC,系统会自动生成一个Hello World项目,直接执行<Ctrl+F11>即可编译生成Hello World程序。
上面简单介绍了Eclipse IDE for C++的一般使用方法,接下来进入正题,开始Arduino编译之旅:
第二步,Arduino IDE
从Arduiono官网 http://arduino.cc/en/Main/Software 上下载Arduino IDE,其中包含了Arduino的编译命令avr-gcc,库文件和硬件配置信息。以供Eclipse直接使用。
第三步,AVR Eclipse Plugin
Eclipse的插件有多种安装方式,我倾向于把插件安装到Eclipse目录之外,通过link的方式调用。方法为:
解压插件包到任意目录,如: D:\eclipse_plugins\avreclipse.2.4.0.final.p2repository
到Eclipse的安装目录下新建一个links目录,在links目录中新建一个任何名称的.link文件,如avreclipse.link,编译这个文件,填入刚才的插件路径:
path=D:\\eclipse_plugins\\avreclipse.2.4.0.final.p2repository
重启Eclipse,如能在Window->Preferences菜单中看到AVR选项即说明插件安装成功。
配置插件Window->Preferences->AVR->Paths,统统指向Arduino IDE里的目录
AVR-GCC : <arduino-1.0.4>\hardware\tools\avr\bin
GNU-make : <arduino-1.0.4>\hardware\tools\avr\utils\bin
AVR Header Files : <arduino-1.0.4>\hardware\tools\avr\avr\include
AVRDude : <arduino-1.0.4>\hardware\tools\avr\bin
如图:
配置插件Window->Preferences->AVR->AVRDude,
选择Use custom config file for AVRDude,输入<arduino-1.0.4>/hardware\tools\avr\etc\avrdude.conf
在Programmer configuration中添加配置
- Programmer Hardware选择Arduino
- Override default port 填写arduino的com口,不知道可以去设备管理器中的Usb serial port上找
- Override default baudrate填写115200
如图:
配置完成!
第四步,编译静态链接库
Arduino的一些标准的库需要事先编译,以省得每个新的项目都把这些东西重要编译一遍。
新建一个C++ AVR静态库项目ArduinoCore:
- Toolchains : AVR-GCC
- Configurations : Release(Arduino没法调试)
- MCU Type : ATMega328P (我的Arduino UNO是这个芯片)
- MCU Frequency : 16000000
Finish
导入静态库通用源码:在ArduinoCore项目上右键->Import->File System
- From Directory : <arduino-1.0.4>\hardware\arduino\cores\arduino
钩选所有文件,Finish
导入静态库型号源码:在ArduinoCore项目上右键->Import->File System
- From Directory : <arduino-1.0.4>hardware\arduino\variants\standard\pins_arduino.h (Arduino UNO的型号)
钩选,Finish
设置编译参数:在ArduinoCore项目上右键->Preferences->C/C++ Build->Settings
- AVR Compiler -> Directories : "${workspace_loc:/${ProjName}}" (引入ArduinoCore自己)
- AVR Compiler -> Optimization -> Other Optimize Flags -ffunction-sections -fdata-sections
* 这两个参数是告诉编译器把程序中的代码段和数据库都分散保存,这样以后编译时就有可能只包含用到的方法和数据,给执行文件减肥
- AVR C++ Compiler -> Directories : "${workspace_loc:/${ProjName}}"
- AVR C++ Compiler -> Optimization -> Other Optimize Flags -ffunction-sections -fdata-sections
Finish
编译项目 Project->Build Project。成功后会生成一个静态文件libArduinoCore.a并出现如下信息:
第五步,编写Arduino程序
准备就绪,可以编写自己的项目了。
新建一个C++ AVR应用项目 ArduinoDemo:
- Toolchains : AVR-GCC
- Configurations : Release
- MTU Type : ATMega328P
- MTU Frequency : 16000000
Finish
配置编译参数
- AVR Compiler -> Directories : "${workspace_loc:/ArduinoCore}" (引入ArduinoCore)
- AVR Compiler -> Optimization -> Other Optimize Flags -ffunction-sections -fdata-sections
- AVR C++ Compiler -> Directories : "${workspace_loc:/ArduinoCore}"
- AVR C++ Compiler -> Optimization -> Other Optimize Flags -ffunction-sections -fdata-sections
- AVR C++ Linker -> General -> Other Arguments -Wl,--gc-sections
* 配合之前的 -ffunction-sections -fdata-sections,编译时过滤未用到的方法和数据
- AVR C++ Linker -> Libraries -> Libraries ArduinoCore (libArduinoCore.a,去除lib和.a)
- AVR C++ Linker -> Libraries -> Libraries Path "${workspace_loc:/ArduinoCore/Release}"
完成,下面可以写程序了,我们以arduino标准的demo程序Blink为例,新建一个新的cpp文件blink.cpp:
/* Blink Turns on an LED on for one second, then off for one second, repeatedly. *复制自arduino示例 This example code is in the public domain. */ // Pin 13 has an LED connected on most Arduino boards. // give it a name: int led = 13; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } /* main方法 */ int main(void) { /* Must call init for arduino to work properly */ init(); setup(); for (;;) { loop(); } }
*arduino代码和c++代码的唯一区别就是arduino会自动生成main方法,依次调用init(), setup()和loop()方法,我们需要自己添加它。
编译项目 Project->Build Project。成功后会会打印程序的大小,用户需要自行确保程序小于arduino的flash空间大小32K
烧录程序:
把arduino连接到电脑的USB口
右键点击项目 Properties->AVR->AVRDude,在Programmer Configuration中选取之前设置过的Arduino,关闭。
选择菜单AVR->Upload Project to Target Device或者按工具栏上的AVR图标
完工,在Arduino上测试我们的程序吧!
相关推荐
在Arduino上使用XBee API,可以极大地简化无线通信的实现过程。 "Xbee-PROreg 900HP"是指XBee PRO系列的900MHz高功率版本。这种模块提供更远的传输距离和更高的功率输出,适合在大型或需要远程通信的项目中使用。 ...
Sloeber,用于Eclipse的Arduino IDE Eclipse IDE(集成开发环境)是功能齐全的编程编辑器,具有许多出色的功能,可帮助您更快速,更轻松地进行编码。 Arduino IDE的功能非常强大–但是在编写,浏览和理解您(以及...
Sloeber_V4.3.2_win64.2019-10-07_08-26-30.tar.gz是一款专为Arduino爱好者设计的开发工具,它巧妙地结合了Eclipse的强大功能与Arduino的易用性,为编程者提供了高效且舒适的开发环境。这个版本是针对Windows 64位...
该程序专为我设计并安装在旧公寓天花板上的灯而设计。 它由 16 个 3 英尺长的 12V RGB LED 灯条组成。 每个条带通过将 Arduino 连接到一组 4 个 TLC5940 芯片来单独控制,每个通道由一个晶体管和一个外部 12V 电源...
标题中的“使用Firmata和JAVA从RaspberryPi访问Arduino的GPIO-项目开发”涉及到一个跨平台的硬件交互技术,即通过Raspberry Pi(简称RPi)与Arduino之间的通信来控制Arduino的GPIO(通用输入/输出)接口。在这个项目...
描述中提到的“借eclipse壳的arduino开发工具”意味着Sloeber是基于Eclipse框架开发的,Eclipse是一个开源的、跨平台的集成开发环境,被广泛应用于Java、C++等各种语言的开发。在Arduino领域,Sloeber扩展了Eclipse...
3. 单片机编程:对于嵌入式系统,如Arduino和STM32,有专门的IDE,如Arduino IDE和Keil uVision,用于编写和烧录单片机代码,实现硬件控制。 4. 模拟与数字信号处理:MATLAB和Simulink提供强大的数学计算和系统建模...
尽管标签上标记的是“java”,但通常在硬件开发领域,Java可能被用作嵌入式系统或者物联网(IoT)项目中的编程语言。因此,我们可以期待这些资源可能涵盖了Java在硬件接口和设备控制方面的应用。 硬件开发是一个广泛...
通过Sloeber,用户可以直接在Eclipse中进行Arduino项目的开发,享受其强大的代码补全、语法高亮、错误检测等功能,极大地提升了开发效率。 其次,Sloeber支持JDK10及以上版本,这使得它能够利用Java最新的特性和...
在这个“java串口通信简单的例子”中,我们将深入探讨如何在Java环境中实现串口通信,并通过Eclipse集成开发环境进行调试和运行。 首先,我们需要了解串口通信的基础知识。串口,也称为串行接口,是一种通过串行...
6. **编程语言与开发工具**:虽然未明确指出,但这类程序通常由C++、Python或Java等编程语言编写,并可能使用如Visual Studio、Eclipse或Arduino IDE等开发环境。开发者需要熟悉这些工具,以便进行代码编写、调试和...
1. **安装与设置**:下载JIFI的源码包(JIFI-master),使用Java开发环境(如Eclipse或IntelliJ IDEA)导入并构建项目。 2. **连接Arduino**:将Arduino设备通过USB连接到计算机,确保驱动程序正确安装。 3. **创建...
Eclipse作为集成开发环境(IDE),需要在有Java运行环境的系统上才能正常运行。用户应当根据自己的操作系统情况,按照光盘上提供的安装指导完成JDK的安装。 接下来,Eclipse的Arduino环境配置是整个开发过程的关键...
"sonarlog_eclipse" 是一个项目名称,表明这是一个使用Eclipse开发环境的Java程序,专门用于处理声纳数据。"Java应用程序可记录来自IOIO的声纳读数" 指出该程序能从连接的IOIO(Input/Output IO)设备获取声纳读数,...
蓝牙RFCOMM(正在开发中,将在v1.0上受支持) 在Linux Mint 18上测试。 依存关系: jSSC,用于com支持驱动程序-https: 将库导入其他项目 单机版 下载jSSC和。 将此库导入到Eclipse Build Path项目中。 玛文 如果...
串口通信在游戏开发中可能用于调试工具、外设交互或是特殊硬件的集成,比如通过串口连接Arduino来控制游戏中的某些物理效果。 【压缩包子文件的文件名称列表】揭示了项目的一些结构和文件类型: 1. `e.classpath`...
Java串口通信是Java编程中一个重要的组成部分,特别是在设备交互、物联网(IoT)和嵌入式系统中。MFZ-RXTX是一个第三方库,它为Java提供了串行通信的功能,使得开发者能够在Java应用程序中方便地与串口进行数据交换。...
这是一个旨在开发由基于Android或Java的客户端控制的自动饮料搅拌机的项目。 Arduino相关代码在/ Arduino中。 Arduino / State_Machine.ino是用于控制和测量流体流量的Arduino。 Arduino / led_machine.ino是控制...
1. **手机应用程序开发**:在安卓平台上,主要的开发语言是Java,因此我们可以使用Eclipse IDE和Android SDK来创建应用。首先,我们需要创建一个新的Android项目,并设计用户界面。在示例中,使用`AbsoluteLayout`...