This program connects a microcontroller to a mySQL database via a Lantronix Xport and a PHP script.
The PHP script it uses is the SQL_datalog.php script in the Network Data Logging Suite.
The relevant Xport settings for this application are as follows:
*** Channel 1 Baudrate 9600, I/F Mode 4C, Flow 00 Port 10001 Remote IP Adr: --- none ---, Port 00000 Connect Mode : D4 Disconn Mode : 00 Flush Mode : 00 *** Expert TCP Keepalive : 45s ARP cache timeout: 600s High CPU performance: disabled Monitor Mode @ bootup : enabled HTTP Port Number : 80 SMTP Port Number : 25
' Xport_to_SQL ' Microcontroller is connected to a Lantronix Xport ' serial-to-ethernet device. This program connects ' to a HTTP server through the Xport, makes a HTTP GET ' request for a PHP script, and sends the value ' of an analog sensor through as a part of the ' GET request. ' Xport communicates at 9600-8-n-1 non-inverted (true) serial. ' By Tom Igoe, 31 oct 2005 ' updated 25 Oct. 2005 ' Define ADCIN parameters DEFINE ADC_BITS 10 ' Set number of bits in result DEFINE ADC_CLOCK 3 ' Set clock source (3=rc) DEFINE ADC_SAMPLEUS 50 ' Set sampling time in uS ' pins to define serial RZX and TX tx var portc.6 rx var portc.7 ' pins with LEDs to indicate whether we're connecting ' or sending an HTTP request: httpPin var portb.7 TCPPin var portb.6 output TCPPin output httpPin ' constant to set the baud rate: inv9600 con 16468 ' for non-inverted connections (PIC to Xport direct): true9600 con 84 ' define variables: adcVar var word inByte var byte connected var bit TRISA = %11111111 ' Set PORTA to all input ADCON1 = %10000010 ' Set PORTA analog and right justify result connected = 0 ' pause to let Xport boot up: pause 2000 main: ' if you're connected to the server, then ' make a HTTP call. If not, then connect ' to the server: if connected = 1 then ' read sensors, convert to bytes: adcin 0, adcVar ' send HTTP GET request for php script: gosub http_request else ' attempt to connect to the server: gosub xport_connect endif tcpPin = connected ' pause so we're not overwhelming the server: pause 3000 goto main xport_connect: ' turn off LED to indicate HTTP GET is in progress: 'low tcpPin ' wait for a "C" byte to come back: while inByte <> 67 serout2 tx, true9600, ["C188.8.131.52/80", 10] serin2 rx, true9600, [inByte] wend ' turn on TCP pin to indicate that we connected: 'high TCPPin connected = 1 return http_request: ' light LED to indicate HTTP GET request in progress: high httpPin SEROUT2 TX, true9600, ["GET /~tqi6023/sql_datalog.php?action=insert&"] serout2 tx, true9600, ["sensorValue=", DEC adcVar] serout2 tx, true9600, [" HTTP/1.1", 10] serout2 tx, true9600, ["HOST: itp.nyu.edu", 10, 10] ' wait for bytes from server: ' php script sends a 0 to end transmission: while inByte <> 0 serin2 rx, true9600, [inByte] wend ' now we're disconnected: connected = 0 ' turn off LED, since GET request is complete: low httpPin return