This is a full demo that connects to mbed Device Server. It is used with a I2C Grove Color sensor, so it should be compatible on all platforms that support Ethernet.

Dependencies:   ColorDetectorV2 EthernetInterface mbed-rtos mbed nsdl

Fork of nespresso_endpoint by Brian Daniels

mbed Software Configuration

The default mbed Device Server (NSP or mDS) configuration is used by an instance of the web app (Barista) here: http://barista-test.cloudapp.net:4005.

In main.cpp, find the following lines:

// ****************************************************************************
// Configuration section
 
// I2C Settings
#define COLOR_SENSOR_SCL I2C_SCL
#define COLOR_SENSOR_SDA I2C_SDA
 
// Ethernet configuration
/* Define this to enable DHCP, otherwise manual address configuration is used */
#define DHCP
 
/* Manual IP configurations, if DHCP not defined */
#define IP      "0.0.0.0"
#define MASK    "255.255.255.0"
#define GW      "0.0.0.0"
 
// NSP configuration
/* Change this IP address to that of your mbed Device Server installation if you're not using mbed Connector */
static const char* NSP_ADDRESS = "api.connector.mbed.org";
static const int NSP_PORT = 5683;
char endpoint_name[] = "nespresso-machine-ethernet";
uint8_t ep_type[] = {"nespresso-endpoint"};
char nsp_domain[] = "56645321f5e24c49908e42f4d71b9ccb";
uint8_t lifetime_ptr[] = {"1200"};
 
// ****************************************************************************

Edit COLOR_SENSOR_SCL and COLOR_SENSOR_SDA to the appropriate I2C pins on your mbed platform.

You should not edit the DHCP/static IP settings if you are not using a static IP address. If you are using a static IP address, provide the appropriate information and remove the following line:

#define DHCP

Change endpoint_name to uniquely identify your Nespresso endpoint.

If you are using mbed Connector, change the nsp_domain string to your domain.

If you are using your own installation of mDS, you should change NSP_ADDRESS to the url of your mDS installation, NSP_PORT if you're using a non default port on mDS for CoAP, and nsp_domain to a valid domain on your mDS instance ("domain" is the default mDS domain).

Committer:
bridadan
Date:
Thu Jul 16 16:24:14 2015 +0000
Revision:
14:a32f557f9de1
Parent:
13:867a5ab8d474
Updating ColorDetectorV2 and increasing sensor gain

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bridadan 0:0782597771bc 1 #include "mbed.h"
bridadan 0:0782597771bc 2 #include "EthernetInterface.h"
bridadan 0:0782597771bc 3 #include "nsdl_support.h"
bridadan 0:0782597771bc 4 #include "dbg.h"
bridadan 0:0782597771bc 5 #include "GroveColourSensor.h"
bridadan 0:0782597771bc 6 #include "ColorDetector.h"
bridadan 0:0782597771bc 7 #include "color_detector.h"
bridadan 7:b2df16ff5076 8 #include <cmath>
bridadan 0:0782597771bc 9
bridadan 0:0782597771bc 10 Serial pc(USBTX, USBRX); // tx, rx
bridadan 0:0782597771bc 11
bridadan 0:0782597771bc 12 // ****************************************************************************
bridadan 0:0782597771bc 13 // Configuration section
bridadan 0:0782597771bc 14
bridadan 6:9e3f6270fcb0 15 // I2C Settings
bridadan 6:9e3f6270fcb0 16 #define COLOR_SENSOR_SCL I2C_SCL
bridadan 6:9e3f6270fcb0 17 #define COLOR_SENSOR_SDA I2C_SDA
bridadan 6:9e3f6270fcb0 18
bridadan 0:0782597771bc 19 // Ethernet configuration
bridadan 0:0782597771bc 20 /* Define this to enable DHCP, otherwise manual address configuration is used */
bridadan 0:0782597771bc 21 #define DHCP
bridadan 0:0782597771bc 22
bridadan 0:0782597771bc 23 /* Manual IP configurations, if DHCP not defined */
bridadan 0:0782597771bc 24 #define IP "0.0.0.0"
bridadan 0:0782597771bc 25 #define MASK "255.255.255.0"
bridadan 0:0782597771bc 26 #define GW "0.0.0.0"
bridadan 0:0782597771bc 27
bridadan 0:0782597771bc 28 // NSP configuration
bridadan 0:0782597771bc 29 /* Change this IP address to that of your mbed Device Server installation */
bridadan 13:867a5ab8d474 30 static const char* NSP_ADDRESS = "api.connector.mbed.org";
bridadan 0:0782597771bc 31 static const int NSP_PORT = 5683;
bridadan 12:11577a49e50f 32 char endpoint_name[] = "nespresso-machine-ethernet";
bridadan 9:202680169650 33 uint8_t ep_type[] = {"nespresso-endpoint"};
bridadan 9:202680169650 34 char nsp_domain[] = "56645321f5e24c49908e42f4d71b9ccb";
bridadan 0:0782597771bc 35 uint8_t lifetime_ptr[] = {"1200"};
bridadan 0:0782597771bc 36
bridadan 0:0782597771bc 37 // ****************************************************************************
bridadan 0:0782597771bc 38 // Ethernet initialization
bridadan 0:0782597771bc 39
bridadan 0:0782597771bc 40 EthernetInterface eth;
bridadan 0:0782597771bc 41
bridadan 0:0782597771bc 42 static void ethernet_init()
bridadan 0:0782597771bc 43 {
bridadan 0:0782597771bc 44 // Initialize network
bridadan 0:0782597771bc 45 #ifdef DHCP
bridadan 0:0782597771bc 46 NSDL_DEBUG("DHCP in use\r\n");
bridadan 0:0782597771bc 47 eth.init();
bridadan 0:0782597771bc 48 #else
bridadan 0:0782597771bc 49 eth.init(IP, MASK, GW);
bridadan 0:0782597771bc 50 #endif
bridadan 0:0782597771bc 51 if(eth.connect(30000) == 0)
bridadan 0:0782597771bc 52 pc.printf("Connect OK\n\r");
bridadan 0:0782597771bc 53
bridadan 0:0782597771bc 54 NSDL_DEBUG("IP Address:%s ", eth.getIPAddress());
bridadan 0:0782597771bc 55 }
bridadan 0:0782597771bc 56
bridadan 0:0782597771bc 57 // ****************************************************************************
bridadan 0:0782597771bc 58 // NSP initialization
bridadan 0:0782597771bc 59
bridadan 0:0782597771bc 60 UDPSocket server;
bridadan 0:0782597771bc 61 Endpoint nsp;
bridadan 0:0782597771bc 62
bridadan 0:0782597771bc 63 static void nsp_init()
bridadan 0:0782597771bc 64 {
bridadan 0:0782597771bc 65 server.init();
bridadan 0:0782597771bc 66 server.bind(NSP_PORT);
bridadan 0:0782597771bc 67
bridadan 0:0782597771bc 68 nsp.set_address(NSP_ADDRESS, NSP_PORT);
bridadan 0:0782597771bc 69
bridadan 0:0782597771bc 70 NSDL_DEBUG("name: %s", endpoint_name);
bridadan 0:0782597771bc 71 NSDL_DEBUG("NSP=%s - port %d\n", NSP_ADDRESS, NSP_PORT);
bridadan 0:0782597771bc 72 }
bridadan 0:0782597771bc 73
bridadan 0:0782597771bc 74 // ****************************************************************************
bridadan 0:0782597771bc 75 // Resource creation
bridadan 0:0782597771bc 76
bridadan 0:0782597771bc 77 static int create_resources()
bridadan 0:0782597771bc 78 {
bridadan 0:0782597771bc 79 sn_nsdl_resource_info_s *resource_ptr = NULL;
bridadan 0:0782597771bc 80
bridadan 0:0782597771bc 81 NSDL_DEBUG("Creating resources");
bridadan 0:0782597771bc 82
bridadan 0:0782597771bc 83 // Create resources
bridadan 0:0782597771bc 84 resource_ptr = (sn_nsdl_resource_info_s*)nsdl_alloc(sizeof(sn_nsdl_resource_info_s));
bridadan 0:0782597771bc 85 if(!resource_ptr)
bridadan 0:0782597771bc 86 return 0;
bridadan 0:0782597771bc 87 memset(resource_ptr, 0, sizeof(sn_nsdl_resource_info_s));
bridadan 0:0782597771bc 88
bridadan 0:0782597771bc 89 resource_ptr->resource_parameters_ptr = (sn_nsdl_resource_parameters_s*)nsdl_alloc(sizeof(sn_nsdl_resource_parameters_s));
bridadan 0:0782597771bc 90 if(!resource_ptr->resource_parameters_ptr)
bridadan 0:0782597771bc 91 {
bridadan 0:0782597771bc 92 nsdl_free(resource_ptr);
bridadan 0:0782597771bc 93 return 0;
bridadan 0:0782597771bc 94 }
bridadan 0:0782597771bc 95 memset(resource_ptr->resource_parameters_ptr, 0, sizeof(sn_nsdl_resource_parameters_s));
bridadan 0:0782597771bc 96
bridadan 0:0782597771bc 97 // Dynamic resources
bridadan 0:0782597771bc 98 create_color_detector_resource(resource_ptr);
bridadan 0:0782597771bc 99
bridadan 0:0782597771bc 100 // Register with NSP
bridadan 6:9e3f6270fcb0 101 register_endpoint(true);
bridadan 0:0782597771bc 102
bridadan 0:0782597771bc 103 nsdl_free(resource_ptr->resource_parameters_ptr);
bridadan 0:0782597771bc 104 nsdl_free(resource_ptr);
bridadan 0:0782597771bc 105 return 1;
bridadan 0:0782597771bc 106 }
bridadan 0:0782597771bc 107
bridadan 0:0782597771bc 108 // ****************************************************************************
bridadan 0:0782597771bc 109 // Program entry point
bridadan 0:0782597771bc 110
bridadan 0:0782597771bc 111 int main()
bridadan 0:0782597771bc 112 {
bridadan 0:0782597771bc 113 NSDL_DEBUG("mbed Nespresso Demo\n");
bridadan 0:0782597771bc 114
bridadan 0:0782597771bc 115 // Begin Color Sensor init
bridadan 0:0782597771bc 116
bridadan 0:0782597771bc 117 // First, ensure I2C bus is released by toggling clock (fixes reset errors)
bridadan 6:9e3f6270fcb0 118 DigitalOut scl_dummy(COLOR_SENSOR_SCL);
bridadan 0:0782597771bc 119
bridadan 0:0782597771bc 120 for (int i = 0; i < 100; i++) {
bridadan 0:0782597771bc 121 scl_dummy = !scl_dummy;
bridadan 0:0782597771bc 122 wait_us(2);
bridadan 0:0782597771bc 123 }
bridadan 0:0782597771bc 124
bridadan 0:0782597771bc 125 // Next, initialize I2C
bridadan 6:9e3f6270fcb0 126 I2C i2c(COLOR_SENSOR_SDA, COLOR_SENSOR_SCL);
bridadan 0:0782597771bc 127
bridadan 0:0782597771bc 128 // Create color sensor instance
bridadan 0:0782597771bc 129 GroveColourSensor colorSensor(&i2c);
bridadan 0:0782597771bc 130
bridadan 0:0782597771bc 131 // Various config
bridadan 0:0782597771bc 132 colorSensor.powerUp();
bridadan 14:a32f557f9de1 133 colorSensor.setGain(3);
bridadan 0:0782597771bc 134 colorSensor.setBlockRead();
bridadan 0:0782597771bc 135
bridadan 0:0782597771bc 136 // Create color detector
bridadan 13:867a5ab8d474 137 ColorDetector detector(&colorSensor, A0);
bridadan 0:0782597771bc 138
bridadan 0:0782597771bc 139 // Pass reference to color detector
bridadan 0:0782597771bc 140 set_color_detector(&detector);
bridadan 0:0782597771bc 141
bridadan 0:0782597771bc 142 // Initialize Ethernet interface first
bridadan 0:0782597771bc 143 ethernet_init();
bridadan 0:0782597771bc 144
bridadan 0:0782597771bc 145 // Initialize NSP node
bridadan 0:0782597771bc 146 nsp_init();
bridadan 0:0782597771bc 147
bridadan 0:0782597771bc 148 // Initialize NSDL stack
bridadan 0:0782597771bc 149 nsdl_init();
bridadan 0:0782597771bc 150
bridadan 0:0782597771bc 151 // Create NSDL resources
bridadan 0:0782597771bc 152 create_resources();
bridadan 0:0782597771bc 153
bridadan 0:0782597771bc 154 nsdl_event_loop_init();
bridadan 0:0782597771bc 155
bridadan 0:0782597771bc 156 while(true) {
bridadan 0:0782597771bc 157 // Check if any nsdl events need to be handled
bridadan 0:0782597771bc 158 nsdl_event_loop_run_once();
bridadan 0:0782597771bc 159
bridadan 0:0782597771bc 160 // Sample the color detector and potentially send samples to mDS
bridadan 0:0782597771bc 161 run_color_detector();
bridadan 0:0782597771bc 162 }
bridadan 0:0782597771bc 163 }