demo of Murata wifi chip as TCP client.
Dependencies: SNICInterface mbed-rtos mbed
Fork of murataDemo by
Intro
this program demonstrates how to use TCP on the Murata Wifi chip. It will connect to a server and send a message, the server will then send a reply. The reply will be printed out to the terminal on the microcontroller.
Instructions
- Make sure you have both the wifi device and the computer running the server on the same network / wifi router.
- Change the hard coded IP in the microcontroller code to match that of the laptop running the python server.
- Run the python2 script below on the computer
- Have a console hooked up to the microcontroller and watch as messages are sent back and forth between the server (python) and the client (murata).
- Run the microcontroller code on the device.
For ease of use numbers have been appended to the end of the messages being sent back and forth.
Python Server
Please run this python2.7 code on your computer. Make sure to change the IP Address in the microcontroller code to match the IP of your computer.
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 7))
s.listen(1)
x = 0
while True:
conn, addr = s.accept()
print 'Connected b'TCP data from server: 'y', addr
while True:
# receive data from board
data = conn.recv(1024)
# check received data
if not data:
break
# print received data
print("TCP data from microcontroller: '"+data+"'")
# send data to board with counter to differentiate messages
conn.sendall("HelloFromPython!: "+str(x)+"\n\r")
x+=1
# close the port
conn.close()
Revision 12:27471bb09274, committed 2013-11-08
- Comitter:
- errordeveloper
- Date:
- Fri Nov 08 16:44:46 2013 +0000
- Parent:
- 11:bdf601a405fc
- Commit message:
- First prototype
Changed in this revision
--- a/C12832_lcd.lib Mon Oct 14 13:33:04 2013 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://mbed.org/users/dreschpe/code/C12832_lcd/#c9afe58d786a
--- a/EthernetInterface.lib Mon Oct 14 13:33:04 2013 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/mbed_official/code/EthernetInterface/#cba86db5ab96
--- a/LM75B.lib Mon Oct 14 13:33:04 2013 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/chris/code/LM75B/#6a70c9303bbe
--- a/MMA7660.lib Mon Oct 14 13:33:04 2013 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/Sissors/code/MMA7660/#a8e20db7901e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UbloxUSBModem.lib Fri Nov 08 16:44:46 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/UbloxUSBModem/#6e9d98f8c237
--- a/app_board_io.cpp Mon Oct 14 13:33:04 2013 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-#include "app_board_io.h"
-#include "C12832_lcd.h"
-
-extern C12832_LCD lcd;
-
-extern "C" void lcd_printf( const char* fmt, ... )
-{
- char buffer[ 64 ];
-
- va_list ap;
- va_start( ap, fmt );
- vsnprintf( buffer, 64, fmt, ap );
- va_end( ap );
-
- lcd.cls();
- lcd.locate( 0, 3 );
- lcd.printf( buffer );
- //wait( 1.0 );
-}
\ No newline at end of file
--- a/app_board_io.h Mon Oct 14 13:33:04 2013 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -#include <stdarg.h> -#include <stdio.h> - -#ifdef __cplusplus -extern "C" -#endif -void lcd_printf( const char* fmt, ... ); \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cellular_board_io.cpp Fri Nov 08 16:44:46 2013 +0000 @@ -0,0 +1,1 @@ +#include "cellular_board_io.h" \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cellular_board_io.h Fri Nov 08 16:44:46 2013 +0000 @@ -0,0 +1,2 @@ +#include <stdarg.h> +#include <stdio.h> \ No newline at end of file
--- a/logo.h Mon Oct 14 13:33:04 2013 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-static char xively_logo_data[] = {
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x0,
- 0x0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0x0, 0x0,
- 0x3e, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0,
- 0x0, 0x0, 0x3e, 0x0, 0x0, 0x0, 0x0, 0xf0,
- 0x0, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x0,
- 0x0, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0,
- 0x10, 0x0, 0x0, 0x0, 0x0, 0xf, 0xc0, 0xf0,
- 0x0, 0x0, 0x1e, 0x7, 0x9c, 0xf0, 0x1e, 0x3f,
- 0xf0, 0xf7, 0x80, 0x78, 0xf, 0xf, 0x1c, 0xf0,
- 0x1e, 0x7f, 0xf8, 0xf7, 0x80, 0xf0, 0x7, 0x9e,
- 0x1c, 0xf0, 0x1e, 0xf8, 0x78, 0xf3, 0xc0, 0xf0,
- 0x7, 0x9e, 0x1c, 0x78, 0x3c, 0xf0, 0x3c, 0xf3,
- 0xc0, 0xe0, 0x3, 0xfc, 0x1c, 0x78, 0x3d, 0xe0,
- 0x1c, 0xf3, 0xc1, 0xe0, 0x1, 0xf8, 0x1c, 0x38,
- 0x39, 0xe0, 0x1c, 0xf1, 0xe1, 0xe0, 0x1, 0xf8,
- 0x1c, 0x3c, 0x79, 0xff, 0xfe, 0xf1, 0xe3, 0xc0,
- 0x1, 0xf8, 0x1c, 0x3c, 0x79, 0xff, 0xfe, 0xf0,
- 0xe3, 0xc0, 0x1, 0xf8, 0x1c, 0x1e, 0xf1, 0xe0,
- 0x0, 0xf0, 0xf3, 0x80, 0x3, 0xfc, 0x1c, 0x1e,
- 0xf1, 0xe0, 0x0, 0xf0, 0x77, 0x80, 0x7, 0x9e,
- 0x1c, 0xf, 0xe0, 0xf0, 0x0, 0xf0, 0x7f, 0x80,
- 0x7, 0x8f, 0x1c, 0xf, 0xe0, 0xf8, 0x10, 0xf0,
- 0x7f, 0x0, 0xf, 0xf, 0x1c, 0xf, 0xe0, 0x7f,
- 0xf8, 0xf0, 0x3f, 0x0, 0x1e, 0x7, 0x9c, 0x7,
- 0xc0, 0x3f, 0xf8, 0xf0, 0x3e, 0x0, 0x3e, 0x3,
- 0xdc, 0x7, 0xc0, 0x1f, 0xe0, 0xf0, 0x1e, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf8, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
- 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
-};
-
-inline void lcd_print_xively_logo() {
- static Bitmap xively_logo = { 80, 32, 10, xively_logo_data };
- lcd.cls();
- lcd.print_bm(xively_logo, 24, 0);
- lcd.copy_to_lcd();
- for(int i = -32; i < 32; i++){
- lcd.cls();
- lcd.print_bm(xively_logo, 24, i);
- lcd.copy_to_lcd();
- wait(0.1);
- }
-}
\ No newline at end of file
--- a/main.cpp Mon Oct 14 13:33:04 2013 +0000
+++ b/main.cpp Fri Nov 08 16:44:46 2013 +0000
@@ -1,68 +1,54 @@
#include "mbed.h"
-#include "EthernetInterface.h"
-#define XI_FEED_ID 128488 // set Xively Feed ID (numerical, no quoutes)
-#define XI_API_KEY "T4KXAH_dasgw1PWBPc3fdsfsdgsdy-dUc4ND0g" // set Xively API key (double-quoted string)
+#include "UbloxUSBCDMAModem.h"
+#include "UbloxUSBGSMModem.h"
+#define MODEM_UBLOX_CDMA // remove this if you are using GSM
-#include "app_board_io.h"
+#define XI_FEED_ID 248 // set Xively Feed ID (numerical, no quoutes)
+#define XI_API_KEY "T4KXAH_dasgw1PWBsfsdgy-dUc4ND0g" // set Xively API key (double-quoted string)
+
+#include "cellular_board_io.h"
#include "xively.h"
#include "xi_err.h"
-#include "MMA7660.h"
-#include "LM75B.h"
-#include "C12832_lcd.h"
-
-MMA7660 axl(p28, p27);
-LM75B tmp(p28, p27);
-C12832_LCD lcd;
+int main() {
-#include "logo.h"
+//TODO: maybe move these into board_io files and do it for app board ethernet version too...
+#ifdef MODEM_UBLOX_CDMA
+ UbloxUSBCDMAModem modem(p18, true, 1);
+#else
+ UbloxUSBGSMModem modem;
+#endif
-int main() {
- lcd_print_xively_logo();
- EthernetInterface eth;
-
- int s = eth.init(); //Use DHCP
+ modem.power(true);
+ Thread::wait(1000);
+
+ int s = modem.connect(NULL, NULL, "internet");
- if( s != NULL )
+ if( s )
{
- lcd_printf( "Could not initialise. Will halt!\n" );
+ printf( "Could not connect to the Internet. Will halt!\r\n" );
exit( 0 );
- }
-
- s = eth.connect();
-
- if( s != NULL )
- {
- lcd_printf( "Could not connect. Will halt!\n" );
- exit( 0 );
- }
- else
- {
- lcd_printf( "IP: %s\n", eth.getIPAddress() );
}
xi_feed_t feed;
memset( &feed, NULL, sizeof( xi_feed_t ) );
feed.feed_id = XI_FEED_ID;
- feed.datastream_count = 3;
+ feed.datastream_count = 1;
feed.datastreams[0].datapoint_count = 1;
- xi_datastream_t* orientation_datastream = &feed.datastreams[0];
- strcpy( orientation_datastream->datastream_id, "orientation" );
- xi_datapoint_t* current_orientation = &orientation_datastream->datapoints[0];
+ xi_datastream_t* counter_datastream = &feed.datastreams[0];
+ strcpy( counter_datastream->datastream_id, "counter" );
+ xi_datapoint_t* counter = &counter_datastream->datapoints[0];
- feed.datastreams[1].datapoint_count = 1;
- xi_datastream_t* side_rotation_datastream = &feed.datastreams[1];
- strcpy( side_rotation_datastream->datastream_id, "side_rotation" );
- xi_datapoint_t* current_side_rotation = &side_rotation_datastream->datapoints[0];
-
- feed.datastreams[2].datapoint_count = 1;
- xi_datastream_t* temperature_datastream = &feed.datastreams[2];
- strcpy( temperature_datastream->datastream_id, "temperature" );
- xi_datapoint_t* current_temperature = &temperature_datastream->datapoints[0];
+ //TODO:
+ //- figure out how got send `AT$DEBUG?` command and parse it's ouput which looks like:
+ // $DEBUG: 4183,233,100,1,99,-9,-105,2,2,2,93,261,429,186,249,438,21,63,63,63,63,63
+ // For details see docs: http://www.u-blox.com/images/downloads/Product_Docs/LISAC200-FW75C200_ATCommandsManual_%28CDMA-2X-11002%29.pdf)
+ // Some of these values represent varios interesting things, e.g. RSSI.
+ // We should put some of those into separate Xively datastreams...
// create the cosm library context
xi_context_t* xi_context
@@ -73,45 +59,15 @@
{
return -1;
}
-
+ long unsigned int c = 0;
while(1) {
- switch( axl.getSide() ) {
- case MMA7660::Front:
- xi_set_value_str( current_side_rotation, "front" );
- break;
- case MMA7660::Back:
- xi_set_value_str( current_side_rotation, "back" );
- break;
- default:
- xi_set_value_str( current_side_rotation, "unknown" );
- break;
- }
+ xi_set_value_i32( counter, ++c );
+
+ printf( "Updating Xively feed %d...\r\n", XI_FEED_ID );
+ xi_feed_update( xi_context, &feed );
+ printf( " done!\r\n" ); //TODO: add error check, as cellular can be flaky.
- switch( axl.getOrientation() ) {
- case MMA7660::Down:
- xi_set_value_str( current_orientation, "down" );
- break;
- case MMA7660::Up:
- xi_set_value_str( current_orientation, "up" );
- break;
- case MMA7660::Right:
- xi_set_value_str( current_orientation, "right" );
- break;
- case MMA7660::Left:
- xi_set_value_str( current_orientation, "left" );
- break;
- default:
- xi_set_value_str( current_orientation, "unknown" );
- break;
- }
-
- xi_set_value_f32( current_temperature, tmp.read() );
-
- lcd_printf( "update...\n" );
- xi_feed_update( xi_context, &feed );
- lcd_printf( "done...\n" );
-
- wait( 15.0 );
+ wait( 50.0 );
}
}
--- a/mbed-rtos.lib Mon Oct 14 13:33:04 2013 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/mbed_official/code/mbed-rtos/#ee87e782d34f
--- a/xi_user_config.h Mon Oct 14 13:33:04 2013 +0000 +++ b/xi_user_config.h Fri Nov 08 16:44:46 2013 +0000 @@ -18,7 +18,7 @@ // On the mbed app board we can use the LCD for debug output, // but one may wish to modify this and write to file instead -#include "app_board_io.h" -#define XI_DEBUG_PRINTF lcd_printf +#include "cellular_board_io.h" +#define XI_DEBUG_PRINTF printf #endif /* __XI_USER_CONFIG_H__ */
Austin Blackstone
