Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DS1820
Fork of J_HTTP_Client by
Diff: main.cpp
- Revision:
- 0:d90e1f7bda1f
diff -r 000000000000 -r d90e1f7bda1f main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Sun May 13 16:31:13 2018 +0000
@@ -0,0 +1,168 @@
+/*
+This fun example was comleted by JohnnyK / odiin@seznam.cz 5/2018
+I am an amateur so this program and web pages are not perfect but working.
+In folder ForServer you can found .php files what you can use for control 3 GPIO (on/off) pins and show temperature on the page. For more follow Readme.txt
+THX Mbed team and Mbed community and all other who want to help other people be a maker :)
+
+I know Mbed web server is better/faster for gpio control but in my country it is not possible to take advantage of ipv6 without extra cost. Our standart is mixed ipv4/ipv6 but with dynamic and not public IP address.
+*/
+#include "mbed.h"
+#include "DS1820.h"
+#include "EthernetInterface.h"
+
+#define SERVER "server.someweb.com" // Here you must place your web server address
+#define PORT 80
+#define HOST "yourweb.com" // Here you must place your web domain
+#define GPIOPAGE "gpio.txt" // Name of TXT file for GPIO setting
+#define TEMPPAGE "nucleoin.php" // Name of web page for temperature add/update
+
+DigitalOut gpio[3] = {D8, LED2, LED3};
+DigitalOut myled1(LED1);
+InterruptIn button(USER_BUTTON);
+Serial pc(SERIAL_TX, SERIAL_RX);
+EthernetInterface net;
+DS1820 ds1820(A0);
+TCPSocket socket;
+Timer timer;
+Ticker ticker;
+
+float temperature;
+int gpioSet[3];
+int i;
+
+void liveLed();
+void justDoIt();
+void connectionStop();
+void softReset();
+
+int main() {
+
+ pc.printf("Client running...\n");
+ // Attach the address of the interrupt handler routine for pushbutton
+ button.rise(&softReset);
+ // Live led
+ ticker.attach(&liveLed, 0.5);
+ // Bring up the ethernet interface
+ net.connect();
+ // Show the network address
+ const char *ip = net.get_ip_address();
+ // Check ip
+ if(ip){
+ pc.printf("IP address is: %s\n", ip);
+ }else{
+ pc.printf("No IP");
+ // Reset when no IP was detected
+ softReset();
+ }
+ // Begin DS1820
+ if(ds1820.begin()) {
+ // Start temperature conversion
+ ds1820.startConversion();
+ // Ĺet DS1820 complete the temperature conversion
+ wait(0.5);
+ } else {
+ pc.printf("No DS1820 sensor found!\r\n");
+ // Reset when no sencor was detected
+ softReset();
+ }
+
+ timer.start();
+
+ while(1){
+ wait(0.5);
+ if(timer > 10){
+ pc.printf("Counter: %d\n", i++);
+ // Read temperature
+ temperature = ds1820.read();
+ pc.printf("Temperature = %3.1f\r\n", temperature);
+ // Start temperature conversion
+ ds1820.startConversion();
+ // Call function for temeperature send and request for gpio setting
+ justDoIt();
+ // Set gpio state for all gpio ports in array
+ for(int i = 0; i < 3; i++){
+ if (gpio[i].read()!= gpioSet[i]){
+ // Set gpio from latest recieved meassege
+ gpio[i] = gpioSet[i];
+ }
+ }
+ // Reset Timer
+ timer.reset();
+ }
+ }
+}
+
+void justDoIt() {
+ char sbuffer[100];
+ char rbuffer[250];
+ char *buffer;
+ int scount;
+ int rcount;
+ //*************************First request*************************
+ // Open a socket on the network interface
+ socket.open(&net);
+ // Create a TCP connection to server and check of success
+ if (socket.connect(SERVER, PORT) < 0) {
+ pc.printf("Failed to connect with server\n\r");
+ connectionStop();
+ }
+ // Fill command string into buffer
+ sprintf(sbuffer,"GET /%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n", GPIOPAGE, HOST);
+ // Send http request
+ scount = socket.send(sbuffer, sizeof sbuffer);
+ // Print shorter string of sended messeage
+ pc.printf("sent %d [%.*s]\n", scount, strstr(sbuffer, "\r\n")-sbuffer, sbuffer);
+ // Recieve simple http response
+ rcount = socket.recv(rbuffer, sizeof rbuffer);
+ // Print out the response
+ pc.printf("recv %d [%.*s]\n", rcount, strstr(rbuffer, "\r\n")-rbuffer, rbuffer);
+ // Ignore data from server and take only values after "gpio:" like 1 0 1
+ buffer = strstr(rbuffer, "gpio:")+ 5;
+ // Extract into int buffer
+ sscanf(buffer,"%d %d %d", &gpioSet[0], &gpioSet[1], &gpioSet[2]);
+ // Close the socket to return its memory
+ socket.close();
+ wait(1);
+ //*************************Second request*************************
+ // Open a socket on the network interface
+ socket.open(&net);
+ // Create a TCP connection to server and check of success
+ if (socket.connect(SERVER, PORT) < 0) {
+ pc.printf("Failed to connect with server\n\r");
+ connectionStop();
+ }
+ // Fill command string into buffer
+ sprintf(sbuffer,"GET /%s/?temp=%3.1f HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n", TEMPPAGE, temperature, HOST );
+ // Send http request
+ scount = socket.send(sbuffer, sizeof sbuffer);
+ pc.printf("sent %d [%.*s]\n", scount, strstr(sbuffer, "\r\n")-sbuffer, sbuffer);
+ // Recieve http response
+ rcount = socket.recv(rbuffer, sizeof rbuffer);
+ // Print out the response line
+ pc.printf("recv %d [%.*s]\n", rcount, strstr(rbuffer, "\r\n")-rbuffer, rbuffer);
+ // Close the socket to return its memory
+ socket.close();
+}
+
+void connectionStop(){
+ // Timer stop
+ timer.stop();
+ // Close the socket to return its memory
+ socket.close();
+ // Bring down the network interface
+ net.disconnect();
+ // Mbed reset
+ softReset();
+}
+
+void softReset(){
+ // Wait
+ wait(2);
+ // Mbed reset
+ NVIC_SystemReset();
+}
+
+void liveLed(){
+ // Change state of Led one
+ myled1 =! myled1;
+}
\ No newline at end of file
