要使用Ardulink,可以先到Ardulink的下載頁下載,會得到一個壓縮檔,找個位置解壓縮後就可以開始進行Ardulink的Java範例,LED閃光(BlinkLED),下面講解詳細步驟:
- 下載Ardulink並解壓縮以後,可以看到如下的檔案結構。
我們會需要用到的有"winDLLs"及"lib"資料夾。
打開winDLLs,可以看到32bit和64bit兩個資料夾,依自已需求選擇打開資料夾後可以再看到三個檔案:LibusbJava.dll、RXTXcomm.jar、rxtxSerial.dll,
LibusbJava.dll及rxtxSerial.dll是Java使用JNI要用的檔案。
RXTXcomm.jar是Java要引入lib的其中一個檔案。
lib資料夾裡的檔案是要給Java要引入的lib。
而在bin資料夾裡面,放了兩個bat檔,其內容就只是幫忙把LibusbJava.dll、RXTXcomm.jar、rxtxSerial.dll放到lib資料夾而已。
為了之後方便且起,在這裡我也把LibusbJava.dll、RXTXcomm.jar、rxtxSerial.dll通通放到lib資料夾。 - 接著是Arduino這端,我們必需要先再Arduino版子上寫入Serial Port溝通相關的程式,打開sketches資料夾,可以看到許多角本,這邊選擇ArdulinkProtocol裡的ArdulinkProtocol.ino執行就好,當然如果有相應的版子也可以選擇相應的角本,例如Digispark可以選擇ArdulinkProtocol4Digispark。
需要注意的是,也為不同型號的版子有些許不同,例如Arduino Due目前沒支援tone()和noTone()這兩個函式,所以要稍微修改角本,因為我使用的是Arduino Due,為了簡單測試方便,就先把用到tone()和noTone()的指令先注解掉。 - 再來是Java這端,這裡以Eclipse Neon IDE及jdk1.8.0_05為例,檔案結構如下,
BlinkLED是我們的主程式,用來控制Arduino的LED燈開闗(第13號PIN),先把剛剛lib資料夾裡的jar檔及RXTXcomm.jar引入library中。
接著設定專案的Native library location,路徑為LibusbJava.dll、rxtxSerial.dll所在的路徑。 BlinkLED.java的內容如下(參考https://github.com/Ardulink/Ardulink-2),作用為一秒亮、一秒暗Arduino板子的LED燈(Pin 13)。import java.io.IOException; import java.util.concurrent.TimeUnit; import org.ardulink.core.Link; import org.ardulink.core.Pin; import org.ardulink.core.Pin.DigitalPin; import org.ardulink.core.convenience.Links; public class BlinkLED { public static void main(String[] args) { Link link = Links.getDefault(); DigitalPin pin = Pin.digitalPin(13); //這裡13 pin是板子的LED燈 boolean power = true; while (true) { System.out.println("Send power:" + power); try { //swicthDigitalPin()為數位輸出,對應了Arduino的digitalWrite() link.switchDigitalPin(pin, power); power = !power; TimeUnit.SECONDS.sleep(1); //1秒亮、1秒暗 } catch (IOException | InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
- 執行BlinkLED.java後,應該就可以看到Arduino板子上的LED燈一亮一暗了。
執行時可能會有下警告訊息,主要是RXTX版本及SLF4J Class衝突等警告,不過並不會影響程式運行,所以可暫且忽略。Stable Library ========================================= Native lib Version = RXTX-2.2-20081207 Cloudhopper Build rxtx.cloudhopper.net Java lib Version = RXTX-2.1-7 WARNING: RXTX Version mismatch Jar version = RXTX-2.1-7 native lib Version = RXTX-2.2-20081207 Cloudhopper Build rxtx.cloudhopper.net SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/Administrator/Downloads/ardulink/lib/slf4j-jdk14-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/C:/Users/Administrator/Downloads/ardulink/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.JDK14LoggerFactory]
附注:
Ardulink有做一個UI介面可以跟Arduino板子作連接並控制(ardulink-console-2.0.1.jar),放在下載下來的 lib/ardulink-console-2.0.1.jar,在執行set32bitWindowsRXTX.bat或set64bitWindowsRXTX.bat(或自己手動把LibusbJava.dll、RXTXcomm.jar、rxtxSerial.dll丟到lib資料下)後,可以直接開啟ardulink-console-2.0.1.jar,看到如下視窗介面,按下Connect與Arduino連接後,在許多功能可以使用,對於想要測一下Arduino,還不想花太多時間寫程式時是個不錯的工具。
您好:
回覆刪除我依照您的指示得到下面的結果...
有用Arduino的程式確認接線正確...
WARNING: RXTX Version mismatch
Jar version = RXTX-2.2pre1
native lib Version = RXTX-2.2pre2
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/User/Desktop/ardulink-V2.1.1-20190517-0752/ardulink/lib/slf4j-jdk14-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/User/Desktop/ardulink-V2.1.1-20190517-0752/ardulink/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.JDK14LoggerFactory]
Exception in thread "main" java.lang.IllegalStateException: Waited for arduino to boot but no response received
at org.ardulink.util.Preconditions.checkState(Preconditions.java:48)
at org.ardulink.core.serial.rxtx.SerialLinkFactory.waitForArdulink(SerialLinkFactory.java:87)
at org.ardulink.core.serial.rxtx.SerialLinkFactory.newLink(SerialLinkFactory.java:74)
at org.ardulink.core.serial.rxtx.SerialLinkFactory.newLink(SerialLinkFactory.java:47)
at org.ardulink.core.linkmanager.LinkManager$DefaultConfigurer.newLink(LinkManager.java:534)
at org.ardulink.core.convenience.Links.getLink(Links.java:118)
at org.ardulink.core.convenience.Links.getDefault(Links.java:56)
at BlinkLED.main(BlinkLED.java:12)
作者已經移除這則留言。
回覆刪除作者已經移除這則留言。
回覆刪除