Jump to content

[Java] Raspberrypi & Java


Recommended Posts

Hi All

 

wie der Titel sagt wohl schon was ich mache.

habe da bei aber ein kleines Problem

 

mein Java Code geht von meinem win7 pc einwandfrei

(TF HW ist an meinen pi angeschlossen)

 

wen ich jetzt meinen Java Code auf dem pi ausführen möchte

geht nur ein teil  :(

kann keine Verbindung zum den 3 bricklets die ich angeschlossen habe aufbauen

ich bekomme immer eine Timeout

 

hier noch mein Code

public class AUTOLCD {
private static final String host = new String("192.168.0.107");
private static final int port = 4223;
private static final String UID = new String("9yEBJGyawck");
private static final String UID1 = new String("Temp1");
private static final String UID2 = new String("LCD");
private static final String UID3 = new String("LUFT");
private static final String UID4 = new String("Licht");
final BrickletLCD20x4 lcd;
final BrickletAmbientLight al;
final BrickletHumidity hum;
final BrickMaster master;
final BrickletTemperature temp;
final IPConnection ipcon;

public static void main(String[] args){
	try {
		new AUTOLCD();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}
public AUTOLCD ()throws Exception {

	ipcon = new IPConnection(host, port);
	temp = new BrickletTemperature(UID1);
	master = new BrickMaster(UID);
	lcd = new BrickletLCD20x4(UID2);
	al = new BrickletAmbientLight(UID4);
	hum = new BrickletHumidity(UID3);


	ipcon.addDevice(master);
	ipcon.addDevice(lcd);
	lcd.backlightOn();	
                // ab hier bekomme ich nur noch Timeouts 
	ipcon.addDevice(al);
	ipcon.addDevice(hum);
	ipcon.addDevice(temp);
               }
}


 

habe es sogar mit den beispielen von TF probiert da geht es auch nicht

das LCD geht aber einwandfrei.

 

Kann mit da jemand weider helfen?

 

MGF Masder

 

 

 

 

Link zu diesem Kommentar
Share on other sites

Schonmal probiert die einzeln anzusprechen? Evtl. hat er den brickd beendet? (ist bei meinem linux manchmal der fall), einfach mal neustarten (also den brickd :D ).

Mal geschaut ob sich die einzeln ansprechen lassen (ohne den verbindungen der anderen) und auf der Konsole ausgeben lassen?

 

Evtl. liegts an einer zu schwachen Stromversorgung? (glaub ich bei den 3 zwar nicht, aber bis meine Beere ankommt kann ichs nicht selber nachprüfen.. )

 

Gruß Flo :)

Link zu diesem Kommentar
Share on other sites

Und wenn erstmal nur das lcd hinzugefügt wird, also alle anderen addDevices auskommentieren ?

Wieso fügst du eig. den Master als Device hinzu ? Ich mache das nie bei meinem Stack.

Um die Bricklets im Code anzusprechen, brauchst du nicht den Master adden.

 

geht nur ein teil 

Was heißt das ? Kommentiere mal das lcd aus ? Gibt es immer noch timeouts ?

Link zu diesem Kommentar
Share on other sites

Hallo Masder,

 

füge mal zwischen jeden addDevice Aufrufe einen Sleep von einer Sekunde ein. Würde mich nicht wundern, wenn es dann bei Dir AUCH funktioniert. Bei mir hat es geholfen und seither funktioniert es mit der RPi ganz ordentlich.

 

Nachtrag: Und den Master musst Du wirklich nicht hinzufügen.

 

Cu

  #arald

Link zu diesem Kommentar
Share on other sites

hallo

 

danke chariowalda der Tipp war sehr gut

 

das einzige was nicht geht ist komischerweise ist mein Temperatur Sensor.

geht auch nicht wen ich ihn nur alleine probiere.

habe noch einen zweiten  zweiten Sensor schau mall ob es mit dem geht.

 

 

Gruß masder

 

@ habe gerade meinen 2 Sensor getestet und der geht Komisch Komisch

das der erste nur unter Windows geht

Link zu diesem Kommentar
Share on other sites

Was ist nun das Ergebnis daraus ?

 

Wenn ein sleep zw. jedem AddDevice nötig ist, scheint es einen Konflikt zw. der Methode backlightOn und den AddDevice zu geben !? Da doch hier intern 2 Threads arbeiten. Heisst das in der Folge der RaspPi unterstützt kein Multithreading ???

Wenn ich mich recht erinnere an die alten DOS-Zeiten, gab es dort auch nur 1 Thread !

Link zu diesem Kommentar
Share on other sites

Tja, die Lehre daraus ... Das die RPi kein Multithreading kann ist -soweit ich das bisher blicke- richtig und falsch zugleich. Von Haus aus kann die RPi das schon, aber ich vermute, dass die JVM auf der RPi da was murkst. Leider ist die RPi derzeit nicht in meinem direkten Zugriff. Wenn das wieder der Fall ist, grabe ich dort jedenfalls weiter, denn das ist echter Murks.

Link zu diesem Kommentar
Share on other sites

Ist die JVM auf dem RaspPi fest in der CPU ?

JVM oder RaspPi selber... Wieso ist das hier noch niemanden aufgefallen, soweit ich das hier im Forum und aus den Kommentaren der Leute überblicke, gab und gibt es das eine oder TF-Projekt schon auf einem RaspPi.

 

BTW bei RS-Components soll es anscheinend den RaspPi mittlerweile ohne lange Wartezeit und unbegrenzt geben.

Link zu diesem Kommentar
Share on other sites

Also ich habe das Debian-Image und OpenJDK installiert auf einer 16GB SDCard. Ich vermute mal, dass auch andere die Kombination haben.

Ja seltsam, dann müsste es bei allen spätestens im addDevice krachen, kann mir nicht vorstellen, dass es immer nur 1 Device war.

Aber wäre super, wenn du diesbezgl nachforscht und hier berichtest.

 

Bisher ist die angegebene Zeit bei 2-4 Wochen
So in etwa dauert es auch bei RS-C:

http://www.elektor.de/elektronik-news/mini-pc-raspberry-pi-nun-ohne-mengen-begrenzung.2218972.lynkx?referer=rss

Link zu diesem Kommentar
Share on other sites

Und diese Teile lassen sich hintereinander adden ?

 

Nein, ich musste immer das Sleep zwischen den addDevice Aufrufen einfügen, daher auch mein Tipp an Masder.

 

Ich kann mir nicht erklären warum das passiert und warum ein Sleep hilft.

 

Hier hatte jemand das gleich Problem unter C auch auf einem Embedded Board: http://www.tinkerunity.org/forum/index.php/topic,322.msg1751.html

 

Da hat dann im Endeffekt ein sleep(0) gereicht. Es ging also nicht darum wirklich eine definierte Zeit zu warten. Bei einem sleep nimmt der Scheduler des OS einen anderen Thread/Process dran und das scheint das Problem zu beheben.

Link zu diesem Kommentar
Share on other sites

Da hat dann im Endeffekt ein sleep(0) gereicht. Es ging also nicht darum wirklich eine definierte Zeit zu warten sondern, bei einem sleep nimmt der Scheduler des OS einen anderen Thread/Process dran.

Wieso ist das bei einer CPU eines EmbeddedPC notwendig aber nicht bei einem DesktopPC ?

 

Das sollte gar nicht notwendig sein. Von Java und C/C++ Sicht aus macht das sleep da keinen unterschied.

 

Ich nehme mal an dass Java Programm und brickd auf einem Raspberry Pi laufen. Wenn ja mach es einen Unterschied wenn sich das Java Programm mit einem brickd auf einem anderen Rechner verbindet, statt mit dem auf dem Raspberry Pi?

Link zu diesem Kommentar
Share on other sites

hi

 

@Phantron

Java Programm läuft auf pi.

TFHW ist auch am pi angeschlossen.

 

habe es gerade noch mal getestet wen ich nur 1 Millisekunde warten reiht das.

aber wen ich es nicht anhalte bekomme ich einen Fehler "Time out"

beim adden.

 

naja ich reg mich da nicht auf ich kann damit leben es läuft und die 4 Millisekunde kann ich auch verkraften

 

MFG masder

 

Link zu diesem Kommentar
Share on other sites

Söderle, war gerade nochmal an der Solaranlage von meinem Kumpel und hab das vorort ausprobiert. sleep(1) reicht tatsächlich, aber ein sleep(0) tut nicht. Die JVM muss also gezwungen werden den Thread kurz zu suspendieren. Das wird spannend. Sobald ich eine weitere RPi in den Händen halte geht's an der Ecke weiter, bis dahin muss ich leider warten.

 

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...