Hi
Ich bin vor kurzem im Netz über Tinkerforge gestoßen.
Nachdem ich kurz darüber nachgedacht hatte was man damit alles basteln kann,
habe ich mit das kleinste Kit um erst einmal zu testen bestellt.
Cool wäre dann mit euch zusammen Autoit und Tinkerforge zu verbinden -> UDF.
Alter Beitrag weiter lesen...
Spoiler anzeigen
[Blockierte Grafik: https://shop.tinkerforge.com/media/catalog/product/cache/2/image/600x600/9df78eab33525d08d6e5fb8d27136e95/s/t/starter_kit_neu_600.jpg]
Nachdem ich etwas Ärger beim Installieren der Treiber/Hardware hatte, konnte ich die ersten Spielereien
über den mitgelieferten Brick Viewer testen.
Falls da auch jemand dran hängt:
Spoiler anzeigen
- der Dienst "Deamon" muss vorhanden und gestartet sein
- im Gerätemanager muss unter "libusb..." -> "Brick_Treiber" vorhanden sein
- Brick Viewer starten. Sollte bei Connect kein Fehler kommen, aber keine Daten im Viewer auftauchen
steckt
das Dingen in nen anderen USB Slot. Bei mir hat es erst geklappt als
ich einen passiven USB-Hub dazwischen geklemmt habe. Warum auch immer...
Wenn ich das bis jetzt richtig verstanden habe wird beim Installieren ein Service gestartet,
der als "Daemon" bezeichnet wird. Er verbinden die Kommunikation die eigentlich über das TCP/IP
Protokoll läuft. D.h. angeschlossen werden die Komponenten via USB ( WLAN und LAN auch möglich durch Erweiterungen )
und über den Deamon dann per localhost Port 4223 angesprochen.
Das sieht im Viewer dann so aus:
autoit.de/wcf/attachment/19092/
Ich habe jetzt hier den Master Brick 2.0 und ein LCD Bricklet angeschlossen.
Geht man jetzt auf den Tab LCD 20x4.. Kann man das LCD schon mit eigenen Eingaben füttern.
autoit.de/wcf/attachment/19102/
autoit.de/wcf/attachment/19097/
Jetzt zu Autoit:
Es gitb um TF anzusprechen einige Sprachen hier zu finden.
Ich denke das zum Übersetzen und erstellen einer UDF am besten C++ als Vorlage sein sollte.
Mein Problem ist nur das ich mich kaum/nicht mit C++ auskenne. Ich dachte das die PHP
Schnittstelle mir mehr liegt. Ist aber auch leider etwas krass. Daher könnte ich für den Anfang vielleicht etwas
Hilfe benötigen. Vielleicht hat ja auch der ein oder andere lust mit zu machen.
Ich habe zum testen jetzt schon einmal folgendes ausprobiert.
Spoiler anzeigen
$TF_ConnectIP = '127.0.0.1'
$TF_Port = '4223'
$TF_UID_DC = '6xicsa'
TCPStartup()
[/autoit] [autoit][/autoit] [autoit]$TF_Socked = TCPConnect($TF_ConnectIP,$TF_Port)
If $TF_Socked <> '' Then
ConsoleWrite("Socked: "&$TF_Socked &@CRLF)
EndIf
Dim $aDataOld
While 1
Sleep(10)
$aData = TCPRecv($TF_Socked, 2048 )
If $aDataOld <> $aData And $aData <> '' Then
ConsoleWrite("Data: "&$aData&@CRLF)
$aDataOld = $aData
EndIf
WEnd
Wenn ich jetzt im Viewer auf Connect drücke erhalte ich
Socked: 452
Data:
0x3134B8D822FD080036786963736100003000000000000000300200000200000D0000CC9D000022FD08006431750000000000367869637361000064010200020001D40000
Da stehe ich jetzt schon etwas vor einem Berg. Ich habe auf der TF Seite auch schon etwas über das Protokoll gefunden.
Wie gesagt vielleicht hat hier jemand schon ne Idee bzw. werde ich mich noch etwas durch die TF Seite und das Forum lesen.
Würde mich mal interessieren was Ihr davon haltet und ob jemand mitmachen möchte.
MFG chris
Nach etwas längerer Zeit der Pause bin ich auch weiter gekommen.
Aber bitte beachten das ich noch kein @error Handling eingebaut habe.
Aber jetzt zum Interessanten..
Was bis jetzt funktioniert: ( nur ein ganz ganz kleiner Teil )
- Autoit Anbindung über TCP/IP an den Daemon
- 2D Array mit der Übersicht der angeschlossenen Brick und Bricklets
- "Hallo Welt" Ausgabe mit Custom Char auf einem Bricklet LCD Display 20x4
Bitte immer die aktuelle TF.au3 laden!
ganz unten...
Bsp. 1:
Spoiler anzeigen
#include'TF.au3'
[/autoit] [autoit][/autoit] [autoit]Global $TF_BrickMaster_UID = _TF_UID_Convert('6xicsa'); = Base58 => 3635950641 = Uint32 => 3134B8D8
Global $TF_BrickletLCD20x4_UID = _TF_UID_Convert('cd1'); = Base58 => 37700 = Uint32 => 44930000
Global $_TF_Global_TCP_DEBUG = True
Global $TFc = _TF_Startup('127.0.0.1','4223')
If @error Then
MsgBox(16,"error","Keine Verbindung zum Daemon")
Exit
EndIf
$StackArray = _TF_Daemon_Get_StackData_2DArray($TFc)
_ArrayDisplay($StackArray)
_TF_BrickletLCD20x4_Clear_Display($TFc,$TF_BrickletLCD20x4_UID)
_TF_BrickletLCD20x4_Backlight($TFc,$TF_BrickletLCD20x4_UID );Licht an
Dim $TF_sCharArray[8]
$TF_sCharArray[0]='10000'
$TF_sCharArray[1]='11000'
$TF_sCharArray[2]='11100'
$TF_sCharArray[3]='11110'
$TF_sCharArray[4]='11110'
$TF_sCharArray[5]='11100'
$TF_sCharArray[6]='11000'
$TF_sCharArray[7]='10000'
_TF_BrickletLCD20x4_Set_Custom_Character($TFc,$TF_BrickletLCD20x4_UID,0,$TF_sCharArray)
_TF_BrickletLCD20x4_Write_Line($TFc,$TF_BrickletLCD20x4_UID,1,2,'\0 Hallo Welt !')
[/autoit] [autoit][/autoit] [autoit]Sleep ( 2500 )
_TF_BrickletLCD20x4_Clear_Display($TFc,$TF_BrickletLCD20x4_UID)
_TF_BrickletLCD20x4_Show_AllCustomChars($TFc,$TF_BrickletLCD20x4_UID)
Sleep ( 2500 )
[/autoit] [autoit][/autoit] [autoit]_TF_BrickletLCD20x4_Backlight($TFc,$TF_BrickletLCD20x4_UID,0 );Licht aus
_TF_BrickletLCD20x4_Clear_Display($TFc,$TF_BrickletLCD20x4_UID)
Array Display:
autoit.de/wcf/attachment/25007/
Da die meinsten es nicht sehen können was auf dem Display passiert hier ein kleines Video:
Youtube Video
Bsp. 2:
Spoiler anzeigen
#include'TF.au3'
[/autoit] [autoit][/autoit] [autoit]Global $TF_BrickMaster_UID = _TF_UID_Convert('6xicsa'); = Base58 => 3635950641 = Uint32 => 3134B8D8
Global $TF_BrickletLCD20x4_UID = _TF_UID_Convert('cd1'); = Base58 => 37700 = Uint32 => 44930000
Global $_TF_Global_TCP_DEBUG = False
Global $TFc = _TF_Startup('127.0.0.1','4223')
If @error Then
MsgBox(16,"error","Keine Verbindung zum Daemon")
Exit
EndIf
; Display säubern und Licht an
_TF_BrickletLCD20x4_Clear_Display($TFc,$TF_BrickletLCD20x4_UID)
_TF_BrickletLCD20x4_Backlight($TFc,$TF_BrickletLCD20x4_UID );Licht an
; Sonderzeichen für Progressbar ins RAM Stelle \3-\7 vom Display schreiben
_TF_BrickletLCD20x4_ProgressOn($TFc,$TF_BrickletLCD20x4_UID)
;Schleife
For $i = 0 To 100
; Prozent im Display setzen wie in Autoit 1 = ( Zeile 1 Prozentzahl Zeile 2 Balken )
_TF_BrickletLCD20x4_ProgressSet($TFc,$TF_BrickletLCD20x4_UID, $i, 1 )
Sleep(100)
Next
[/autoit] [autoit][/autoit] [autoit];Auf 100 Prozent setzen
_TF_BrickletLCD20x4_ProgressSet($TFc,$TF_BrickletLCD20x4_UID, 100, 1 )
Sleep(2000)
[/autoit] [autoit][/autoit] [autoit];Display säubern
_TF_BrickletLCD20x4_Clear_Display($TFc,$TF_BrickletLCD20x4_UID)
;Smiley als Sonderzeichen ans RAM Stelle \0 des Displays
Dim $TF_sCharArray[8]
$TF_sCharArray[0]='00000'
$TF_sCharArray[1]='01010'
$TF_sCharArray[2]='01010'
$TF_sCharArray[3]='01010'
$TF_sCharArray[4]='00000'
$TF_sCharArray[5]='10001'
$TF_sCharArray[6]='01110'
$TF_sCharArray[7]='00000'
_TF_BrickletLCD20x4_Set_Custom_Character($TFc,$TF_BrickletLCD20x4_UID,0,$TF_sCharArray)
;Zeile ausgeben
_TF_BrickletLCD20x4_write_line($TFc,$TF_BrickletLCD20x4_UID,2,4,'MFG Chris \0')
Sleep(2000)
_TF_BrickletLCD20x4_Clear_Display($TFc,$TF_BrickletLCD20x4_UID)
_TF_BrickletLCD20x4_Backlight($TFc,$TF_BrickletLCD20x4_UID,0 )
Damit Ihr wieder sehen können was auf dem Display passiert:
Aktueller Stand ( 9 Beispiele
In der angehangenen Zip ist die TF.au3 + Beispiele
TinkerForge_Bsp1_LCDHelloWorld
TinkerForge_Bsp2_LCDProgessBar
TinkerForge_Bsp3_FirstEvent
TinkerForge_Bsp4_GetStackData
TinkerForge_Bsp5_Poti
TinkerForge_Bsp10_1_ServoBrick
TinkerForge_Bsp10_2_ServoBrick_Event
TinkerForge_Bsp11_1_StepperBrick
TinkerForge_Bsp12_16IO
Aktuelle Version hier Runterladen 06.03.2015
autoit.de/wcf/attachment/25232/
Soooo... Wie gesagt das ist nur der Anfang...
Aber ich hoffe es kann jemand gebrauchen bzw. hat lust es mit weiter aus zu bauen.
Ich werde versuchen nach und nach alles zu übersetzen.
Wenn jemand noch Ideen und weitere Anregungen hat immer raus damit!
MFG Chris