Sida 2 av 4
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 24 september 2018, 22:27:35
av Mr Andersson
Mjukvarustack kanske? Eftersom atmega inte har hårdvaru-USB.
Men för någon som tycker att lite text-parsing är jobbigt känns det lite långsökt att han skulle skriva en egen USB-stack.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 24 september 2018, 22:58:43
av Rick81
Tror han menar USB till UART. Om det nu är så vilket USBkrets är det?
Jag skulle skicka en byte kommando(get/set, digitalt/analogt, riktning) en byte vilken port, en byte vilken bitmask, en byte vilket värde och sedan 1 byte checksumma. Borde gå tillräckligt snabbt.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 24 september 2018, 23:05:22
av TomasL
Det kräver en USB-Slav i Arduinon och en HOST i PIn.
Enklast är nog vanlig seriekommunikation vis UART och RS232
SPI funkar också bra.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 25 september 2018, 00:22:57
av Al_Bundy
Jag testade med att försöka få Firmata att fungera. Här blev mitt resultat.
Kod: Markera allt
sep. 25, 2018 12:15:14 FM org.firmata4j.firmata.FirmataDevice handleEvent
VARNING: event error handler not implemented. will ignore event
sep. 25, 2018 12:15:14 FM org.firmata4j.firmata.FirmataDevice handleEvent
VARNING: event error handler not implemented. will ignore event
sep. 25, 2018 12:15:17 FM org.firmata4j.firmata.FirmataDevice onProtocolReceive
VARNING: Current version of firmata protocol on device (2.5) differs from version supported by frimata4j (2.3). Though these are compatible you may experience some issues.
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1787)
at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Node.fireEvent(Node.java:8865)
at javafx.controls/javafx.scene.control.Button.fire(Button.java:200)
at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3876)
at javafx.graphics/javafx.scene.Scene$MouseHandler.access$1300(Scene.java:3604)
at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1874)
at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2613)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1784)
... 47 more
Caused by: java.lang.InterruptedException: Connection timeout
at org.firmata4j.firmata.FirmataDevice.ensureInitializationIsDone(FirmataDevice.java:153)
at application.Controller.startConnection(Controller.java:47)
... 58 more
Det som händer är att min Arduino's RT och RX lambor blickar när jag tycker på "Start" och sedan slutar dem blinka och jag får felmeddelandet på denna kodrad:
Kod: Markera allt
device.ensureInitializationIsDone(); // wait for initialization is done
Jag har bifogat programmet med namn ArduinoFX.zip,
Den kräver Eclipse eller annan IDE som kan hantera projekt som är skapade med Maven. Enklaste är att ni endast installerar Eclipse och sedan Spring IDE tillägget på Menu -> Help -> Eclipse Market Place -> Sök på "Spring IDE" och installera.
Där efter kan ni importera projektet via Menu -> File -> Import -> Import maven projects.
Kör programmet igenom att högerklicka på "ArduinoFX -> Run As -> Java Application".
En sak till! Ni måste ha Java FX installerat. Detta kan ni göra på "Eclipse Market Place" också.
Som sagt: Jag får det inte att fungera med min dator.
Först följ denna manual:
https://github.com/firmata/arduino
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 25 september 2018, 00:28:11
av Al_Bundy
Mr Andersson skrev:Mjukvarustack kanske? Eftersom atmega inte har hårdvaru-USB.
Men för någon som tycker att lite text-parsing är jobbigt känns det lite långsökt att han skulle skriva en egen USB-stack.
TomasL skrev:Det kräver en USB-Slav i Arduinon och en HOST i PIn.
Enklast är nog vanlig seriekommunikation vis UART och RS232
SPI funkar också bra.
Rick81 skrev:Tror han menar USB till UART. Om det nu är så vilket USBkrets är det?
Jag skulle skicka en byte kommando(get/set, digitalt/analogt, riktning) en byte vilken port, en byte vilken bitmask, en byte vilket värde och sedan 1 byte checksumma. Borde gå tillräckligt snabbt.
Jag kanske får testa på ModBus med Arduino?
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 25 september 2018, 01:22:24
av lillahuset
Nej, jag orkar inte komma med invändningar. Menar du allvar?
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 25 september 2018, 02:14:41
av TomasL
Al_Bundy skrev:
Jag kanske får testa på ModBus med Arduino?
Du lyssnar aldrig, och läser aldrig vad som skrivs.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 25 september 2018, 06:40:07
av Icecap
Mjag tror faktisk att Al läser inläggen - men jag är lika säker på att h*n inte förstår dom tyvärr.
Men visst, MODBUS är ju iaf. en aning bättre än det första förslag. Men svar på kommunikationen USB - USB lär jag inte få inser jag, ganska sannolikt för att det inte finns.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 25 september 2018, 08:22:44
av Jan Almqvist
Modbus är ett mycket bra val. Beprövat, effektivt och enkelt. Då kan du även använda färdiga, billiga IO-moduler.
http://www.modbus.org/
Via UART är det Modbus RTU som gäller.
Att skicka textsträngar är en skitlösning!!
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 25 september 2018, 08:23:47
av Rick81
Al: kolla TomasL och mina förslag en gång till. De är de lättare än att få igång nåt speciallib från nätet. Du har väl använt USB UART i tidigare trådar med Arduino? Annanr finns det nog många sidor på nätet on uart, spi på raspberry pi.
Sen är det smidigare får två processorer att tolka binär data med en bestämds längd än strängar och även effektivare då skriva ut ett värde i sträng på en cpu (tror intr atmegan har det) som inte har division tar mångs klockcyckler.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 25 september 2018, 09:14:59
av Al_Bundy
Men sitter det inte en UART redan på en Arduino?
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 25 september 2018, 09:35:55
av Rick81
Ja så använd den. Antingen till Rasberry pi uart eller USBuart.
Du använde väl en sån för programmera från PC.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 25 september 2018, 09:40:21
av Al_Bundy
Det är ju den jag redan använder.
Men jag får inte Firmata att fungera.
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 25 september 2018, 09:41:28
av Rick81
Ja, kolla mitt förslag på protokoll. Det är lätt implementera
Re: Ett bra sätt att få kommunikation mellan PI & Arduino?
Postat: 25 september 2018, 09:43:36
av Al_Bundy
Så vad är det för typ av protokoll du rekommenderar då mellan USB hålet från Arduino till USB hålet på Pi?
Edit: Hittade ditt förslag, men låter det inte som att skapa hjulet på nytt igen?