Gadgeteer, Ethernet and Windows Azure
I was having problems getting my Gadgeteer ethernet card initialised and running. I wanted to set it up to use DHCP but I never got an IP address assigned. I am using a GHI Electronics J11D ethernet card and browsing for examples seemed to pull up a lot of code but none of it seemed to work or the code didn’t seem to match what the libraries were providing. I eventually found the solution.
1// Wire up the event handler to notify when the ip address has been assigned // and the port is ready to use ethernet\_J11D.Interface.NetworkAddressChanged += new NetworkInterfaceExtension.NetworkAddressChangedEventHandler(
2 Interface\_NetworkAddressChanged); // Open the ethernet port ethernet\_J11D.Interface.Open(); // Assign the network stack to the ethernet card if (!ethernet\_J11D.Interface.IsActivated) { NetworkInterfaceExtension.AssignNetworkingStackTo(ethernet\_J11D.Interface); } // Turn on DHCP and Dynamic DNS ethernet\_J11D.Interface.NetworkInterface.EnableDhcp(); ethernet\_J11D.Interface.NetworkInterface.EnableDynamicDns();
It was the line (NetworkInterfaceExtension.AssignNetworkingStackTo(ethernet_J11D.Interface); ) that was the issue, once that was in everything worked fine.
I can now connect to my Windows Azure Websites hosted web api/signalR service.
The code for this is fairly standard and once I got the connection it worked well. The code below shows you how to call the web api service from Gadgeteer. This method works for both GET (read) and PUT (update) requests.
1private string CallWebservice(string fn, bool put, string data) { string responseFromServer ; try { // Create a request for the URL. WebRequest request = WebRequest.Create(url + fn); // set a timeout of a nice big value - 10 minutes request.Timeout = 600000; if (put) { request.Method = "PUT"; System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); byte\[\] arr = encoding.GetBytes(data); request.ContentType = "application/json"; request.ContentLength = arr.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(arr, 0, arr.Length); requestStream.Close(); } // Get the response. WebResponse response = request.GetResponse(); // Get the stream containing content returned by the server. Stream dataStream = response.GetResponseStream(); // Open the stream using a StreamReader for easy access. StreamReader reader = new StreamReader(dataStream); // Read the content. responseFromServer = reader.ReadToEnd(); // Tidy up reader.Close(); response.Close(); } catch (Exception ex) { Debug.Print(ex.Message); } return responseFromServer ; }