Posts Tagged ‘PHP Tutorials’

iPhone gesteuertes R/C Auto (Teil 2)

Sunday, February 6th, 2011

Ich habe nun mein Projekt “iPhone controlled R/C Car” abgeschlossen. Nach ein paar Stunden basteln und programmieren kann ich nun das Projekt auch dem grossen Publikum zeigen.

Die Fernbedienung von meinem Auto mit den Steuerkabeln an den entsprechenden Stellen angelötet.

Steckverbindungen auf dem Breadboard.

Da das ganze auf den Bildern nicht wirklich überschaubar ist, habe ich hier ein ganz einfaches Schema gezeichnet.

Bitte an dieser Stelle nicht erschrecken. Ich habe auf meiner Schaltung noch ein paar LED’s dazwischen gehängt, damit ich sehe was gerade alles angesteuert wird. Die Artikelnummer von Conrad für die Transistoren lautet 151034 – 62. So gehts leichter zum bestellen.

Nun aber zum Highlight des Ganzen! Die iPhone App um das Auto zu steuern.

Die Kommunikation zwischen iPhone und Arduino µC funktioniert über Ethernet. Damit ich nicht ans iPhone als Fernbedienung gebunden bin, habe ich einen Middlelayer eingebunden. Dieser ist mittels PHP Programmiert. Das PHP Script öffnet eine Socketverbindung zum Arduino und sendet ein String welcher das Programm auf dem µC auswertet und den entsprechenden Ausgang schaltet.

Die iPhone App ruft bei einem Touch-Event einfach das PHP-Script mit dem entsprechenden Parameter auf. Das PHP-Script leitet diesen Parameter and den µC weiter. So einfach funktioniert das.

Hier das PHP-Script:

<?php

function sendCommand($command) {
  $c = fsockopen('1.1.1.2', 80, $errno, $errstr, 1);

  if(!$c) {
    echo $errstr.' ('.$errno.")<br />\n";
  }
  else {
    fwrite($c, $command);
    echo 'sent data: '.$data;
    fclose($c);
  }
}

sendCommand($_GET['q']);
?>

Und hier das Programm auf dem µC:

#include <SPI.h>
#include <Ethernet.h>

#define Bwd 8
#define Fwd 7
#define Left 6
#define Right 5

String command; //W=119;A=97;S=115;D=100
int stateBwd = false;
int stateFwd = false;
int stateLeft = false;
int stateRight = false;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 1,1,1,2 };

Server server(80);

void setup() {
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
  pinMode(Bwd, OUTPUT);
  pinMode(Fwd, OUTPUT);
  pinMode(Left, OUTPUT);
  pinMode(Right, OUTPUT);
}

void loop() {
   Client client = server.available();
   
   if(client) {
     command = "";
     while(client.connected()) {
       if(client.available()) {
         char c = client.read();
         command += c;
       }
       //client.stop();
     }
    if(command=="F") { //Forward
      if(stateFwd) {
        stateFwd = false;
        digitalWrite(Fwd, LOW);
      }
      else {
        stateFwd = true;
        stateBwd = false;
        digitalWrite(Bwd, LOW);
        digitalWrite(Fwd, HIGH);
      }
    } //command 119
   
    if(command=="B") { //Back
      if(stateBwd) {
        stateBwd = false;
        digitalWrite(Bwd, LOW);
      }
      else {
        stateFwd = false;
        stateBwd = true;
        digitalWrite(Fwd, LOW);
        digitalWrite(Bwd, HIGH);
      }
    }
   
    if(command == "L") { //Left
      if(stateLeft) {
        stateLeft = false;
        digitalWrite(Left,LOW);
      }
      else {
        stateRight = false;
        digitalWrite(Right, LOW);
        stateLeft = true;
        digitalWrite(Left, HIGH);
      }
    }
   
    if(command == "R") { //Right
      if(stateRight) {
        stateRight = false;
        digitalWrite(Right, LOW);
      }
      else {
        stateLeft = false;
        digitalWrite(Left, LOW);
        stateRight = true;
        digitalWrite(Right, HIGH);
      }
    }
     
     delay(1);
     client.stop();
   }
}

Für die Xcode-User habe ich hier noch mein kleines Xcode Projekt zum Download. Hier muss in der Source nur noch die URL des obigen PHP-Scripts angepasst werden.
Download rccar Xcode Project

Mangels einer zweiten Kamera (die einzige ist im iPhone) kann ich leider noch kein Video machen. Ich schau mal ob ich meine alte Digicam noch finde.
Bis dahin viel Spass beim Basteln!

MySQL nicht nur mit PHP auf Leopard

Thursday, December 13th, 2007

Connect Using Socket: /var/mysql/mysql.sockEin Kommentar auf diesen Post von mir hat mich auf ein Problem aufmerksam gemacht, welches entsteht wenn man MySQL5 für PHP unter Mac OS X Leopard installiert. Die Verbindung zwischen PHP und MySQL funktioniert zwar wunderbar, jedoch ist es nicht möglich mit Programmen wie zum Beispiel dem MySQL Query Browser oder dem MySQL Administrator zum MySQL-Server zu verbinden. Ich hatte dieses Problem auch schon. Jedoch war es für mich klar, dass ich bei den Verbindungsoptionen das neue Socketfile angeben muss und nicht das default Socket file nehmen kann. Wir haben ja bei der Installation von MySQL den Socket-Pfad geändert. Ich habe mal ein kleinen Screenshot gemacht, wie ihr mit Drittprogrammen mit eurem MySQL Server unter Leopard kommunizieren könnt. In meinem Beispiel ist das der Query Browser von MySQL. Ihr müsst einfach den Pfad zum Socketfile angeben. Zur Erinnerung. Das Socketfile ist dies hier:

/var/mysql/mysql.sock

Ich hoffe es klappt nun auch mit Drittsoftware.

Webseite von Akelos nicht mehr erreichbar?

Thursday, November 15th, 2007

Was ist los? Irgendwie kann ich die Webseite vom Akelos Framework nicht mehr erreichen. Im Verlauf des Tages war nur die Hauptseite nicht erreichbar. Die API Dokumentation und das Forum waren jedoch erreichbar. Nun um 20:04 kann ich überhaupt keine Akelos Seite mehr erreichen.

Bin ich der einzige?

Update von 21:57

All clear. Funktioniert wieder. Seite ist wieder online.

PHP unter Mac OS X 10.5 aktivieren

Thursday, November 1st, 2007

So! Nach der Umstellung auf Leopard ist es wieder an der Zeit mich meinen Projekten zu widmen. Dazu brauche ich PHP5. Auf Mac OS X 10.5 alias Leopard ist standardmässig PHP in der Version 5.2.4 installiert. Dies findet man im Terminal mit dem Befehl

php -v

heraus. Das Ergebnis war bei mir folgendes:

PHP 5.2.4 (cli) (built: Sep 23 2007 22:34:35)

Copyright (c) 1997-2007 The PHP Group

Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

Nun brauche ich PHP nicht auf der Kommandozeile sondern mit dem Apachen der ebenfalls auf Leopard installiert ist. Um PHP für Apache zu aktivieren geht man per Terminal in das Verzeichnis

/etc/apache2
cd /etc/apache2

Danach muss mann in der

httpd.conf

die folgende Zeile auskommentieren:

sudo nano httpd.conf

#LoadModule php5_module        libexec/apache2/libphp5.so

zu

LoadModule php5_module        libexec/apache2/libphp5.so

Bei mir fand sich das ganze auf der Zeile 114.

Wenn nun diese Änderung gemacht worden ist, muss man nur noch den Apachen neu starten und PHP läuft.

sudo apachectl restart

Ruby on Rails Port für PHP

Wednesday, October 10th, 2007

Gestern habe ich mal ein Bisschen mit Ruby on Rails herumgespielt. Ich habe mir gedacht, soetwas für PHP wäre doch genial. Weil ich habe nicht wirklich lust noch eine Programmiersprache zu lernen. Dadurch habe ich ein Bisschen im Internet herumgeschaut und bin dabei auf das Akelos Framework gestossen. Bei Akelos handelt es sich um ein Ruby on Rails Port für PHP4 und PHP5.  Was ich sehr wizig fand, ist der Screencast auf akelos.org. Es wird genau das selebe gemacht wie im Screencast für Ruby on Rails. So kann man die beiden Frameworks super vergleichen.

Ich denke ich werde mich mehr mit Akelos als mit Ruby on Rails auseinandersetzen. Ganz einfach darum, weil ich PHP besser kann.