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.
Technorati Tags: networked objects, networks
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
The code:
' 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, ["C128.122.253.189/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