www.mikrocontroller.net

Forum: PC-Programmierung Bluetoothmodul über Java ansprechen


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Su Si (sannchen)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo Leute,

ich habe ein Bluetoothmodul (BlueMod+P25/G2 von Stollmann) und möchte 
das über ein Java(ME) Midlet, seriell gekoppelt mit einem Funkgerät, mit 
den dafür bereitgestellten AT-Befehlen ansprechen. Allerdings scheine 
ich die Übergabe der AT-Befehle oder ein paar Vorbedingungen nicht 
richtig machen.
Habt ihr Erfahrung, ob es möglich ist über ein Java Programm AT-Befehle 
an das Bluetoothmodul zu übergeben?
private void sendeAT_i()
    {
        try
        {  
            os = cc.openOutputStream();
            
            os.write(65);  // A
            os.write(84);  // T
            os.write(32);  // Leerzeichen
            os.write(105); // i
            os.write(13);  // Enter          
            os.write(10); // Linefeed
            
            os.flush();
        }
        catch(IOException io)
        {
            textBox.setString("Fehler beim Senden der Daten: " + io.getMessage());
        }    
    } 
private void open() 
    {
      try
        {  
            cc= (CommConnection)Connector.open("comm:COM0");
            if(cc != null)
            {
                is = cc.openInputStream();
                sendeAT_i();
                
                int n = 0;                
                StringBuffer sb = new StringBuffer();
                while ((n = is.read()) != -1) 
                {
                    sb.append((char) n);
                    String result=sb.toString();
                textBox.setString("InputStream:" + result);
                }
                os.close();
                cc.close();
                is.close();      
            }
        }      
      catch(IOException io)
      {
           textBox.setString("Fehler " + io);
      }
      finally 
      {
          if (cc != null)
          {
             try
             {
                 cc.close(); 
                 os.close();
                 is.close();
             }
             catch(IOException e)
             {
                 textBox.setString("Fail: " + e.getMessage()); 
             }
          }
      }

Danke!!

Autor: Läubi .. (laeubi) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo Sannchen, ja es ist möglich, und du hast noch immer deine Probleme 
mit der inkonsistenten Nutzung der Streams.
Beitrag "JavaME Input Stream"

Autor: Su Si (sannchen)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hey,
irgendwie wusste ich, dass du der Erste bist, der antwortet :)

Ja ich weiß, richtig gut ist das Programm noch nicht, aber es läuft 
erstmal so wie ich es will (fast). Mir ist es erstmal wichtig, dass das 
Bluetoothmodul angesprochen wird und reagiert. Nur leider reagiert es 
nicht.

Autor: Läubi .. (laeubi) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Naja das ist eben der unterschied zwischen "Funktioniert" und 
"Funktioniert (fast)".
Hast du den schon mal versucht das Modul mit hterm oder ähnlichem 
anzusprechen?

Außerdem verschluckst du möglicherweise immer noch 
Fehlermeldungen/Exceptions

Su Si schrieb:
> os.write(65);  // A
>             os.write(84);  // T
>             os.write(32);  // Leerzeichen
>             os.write(105); // i
>             os.write(13);  // Enter
>             os.write(10); // Linefeed

Wieso jetzt hier als "Zahlen"? Das verwirrt doch nur, du hattest das 
doch schon mal als String gesendet oder? Wenn das noch was werden soll 
musst du auf jedenfall strukturierter vorgehen, wie und wo wird z.B. 
sende aufgerufen etc... du blockierst dir da nämlich den aktuellen 
Thread, das kann ins Auge gehen...

Autor: Su Si (sannchen)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ja, hatte das Bluetoothmodul schon mehrfach über hterm oder tera term 
angesprochen und das funktioniert tadellos.
Ich weiß ja, was ich auf bestimmte AT-Befehel vom Bluetoothmodul für 
Antworten bekomme. Nur diese bekomme ich über das Javaprogramm nicht, 
von daher weiß ich auch nicht, ob die Kommunikation zwischen den beiden 
überhaupt funktioniert.
Baudrate und sowas sind bei beiden gleich.

Wie gesagt, das Javaprogramm funktioniert zwischen Funkgerät und 
PC/Terminal so wie es soll. So das ich eigentlich nirgends eine 
Exception erwarten würde.

Ja ich hatte erst die Befehle als Strings übergeben. Aber das 
Bluetoothmodul erwartet ASCII Zeichen und antwortet auch in diesen (habe 
nachgelesen). Deswegen übergebe ich jetzt Zahlen/ASCII.

Ich will den InputStream noch in eine Methode auslagern. Welchen Thread 
blockier ich mir denn?

Autor: Läubi .. (laeubi) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Su Si schrieb:
> Deswegen übergebe ich jetzt Zahlen/ASCII

das ist im endeffekt aber alles dasselbe, so ist es nur maximal 
unleserlich.
Versuch doch einfach mal die selbe Sequenz mit dem Programm zu senden 
und nutze als Empfänger Teraterm dann sieht man doch was ankommt und was 
sich unterscheidet.

Autor: Su Si (sannchen)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Du meinst wenn ich "AT-Befehl\n\r".getBytes(); mache, werden die 
letztendlich auch als ASCII Zeichen übergeben? Muss ich dann dem 
Programm noch irgendwie sagen, dass er das umwandeln soll?

Läubi .. schrieb:
> Versuch doch einfach mal die selbe Sequenz mit dem Programm zu senden
> und nutze als Empfänger Teraterm dann sieht man doch was ankommt und was
> sich unterscheidet

Versteh ich nicht. Bitte mal genauer erklären, wie und was?

Autor: Läubi .. (laeubi) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Su Si schrieb:
> Muss ich dann dem Programm noch irgendwie sagen,
> dass er das umwandeln soll?
Mittels getBytes("US-ASCII"); gehst du auf Nummer sicher, ist aber nur 
bei Sonderzeichen relevant.

Su Si schrieb:
> Versteh ich nicht. Bitte mal genauer erklären, wie und was?

PC1 mit Java Programm-->Comport-->KABEL->Comport PC 2 mit hterm

Autor: Su Si (sannchen)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Okay, dann werde ich in Zukunft die Methode nutzen. Da die Zahlen echt 
umständlich sind.

Ganz ehrlich, ich verstehe deinen Aufbau immer noch nicht. Denn das 
Javaprogramm läuft nur so richtig auf dem Funkgerät. In NetBeans der 
Emulator kann das nicht richtig nachbilden, da es dort keine Funkgeräte 
gibt.

Autor: Läubi .. (laeubi) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Du sollst das auch erstmal ohne Funkmodul sondern über die "normale" 
RS232 erst mal gegenchecken.

Autor: Su Si (sannchen)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ich habe jetzt einen PC seriell mit einem anderen PC gekoppelt. Auf PC1 
starte ich das Midlet (.jad).
Es kommt nur die Frage, ob eine serielle Verbindung eingegangen werden 
soll, ich klicke auf ja und dann passiert nichts mehr.
Ich hab nur noch Fragezeichen im Kopf!

Autor: Su Si (sannchen)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hey Läubi,

mittlerweile funktioniert mein Input Stream. Allerdings verlässt er die 
while-Schleife nicht mehr. Ich habe schon sämtliche Abbrechbedingungen 
versucht. Vielleicht fällt dir/euch noch eine ein?
public void run()
            {
                try
                {
                    openConnections();
                    form.append("\n Sende AT-Befehle");

                    form.append("\n Sende AT**BINQ=2");
                    os.write("\n\r AT**BINQ=2 \n\r".getBytes("US-ASCII"));
                    os.flush();
                   
                    int n = 0;
                    StringBuffer sb = new StringBuffer();       
            while ((n = is.read()) != -1) 
            {
                sb.append((char) n);
                String result = sb.toString();
                form.append("\n InputStream:" + result);
            } 
            }
            // es folgt catch Block
          }

Er gibt nacheinander die Zeichen die ankommen, aus und dann bleibt er in 
der Schleife hängen.

Bin für jeden Tipp dankbar!

Sannchen

Autor: Läubi .. (laeubi) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Su Si schrieb:
> Allerdings verlässt er die
> while-Schleife nicht mehr

Hab ich doch schon oben geschrieben, der Stream wird nie beendet, da ein 
Serieller Port kein "EOF" oder dergleichen kennt.
Üblicherweise weiß man aber, dass z.B. nach einem Zeilenumbruch o.ä. 
zumindest ein Datensatz vollständig da ist, kann diesen verarbeiten und 
dann weiter vorgehen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net