Advertisement
naldin

Arduino Bridge w HTML

Jul 28th, 2014
479
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.19 KB | None | 0 0
  1. /*
  2.   Arduino Yun Bridge example
  3.  
  4.  This example for the Arduino Yun shows how to use the
  5.  Bridge library to access the digital and analog pins
  6.  on the board through REST calls. It demonstrates how
  7.  you can create your own API when using REST style
  8.  calls through the browser.
  9.  
  10.  Possible commands created in this shetch:
  11.  
  12.  * "/arduino/digital/13"     -> digitalRead(13)
  13.  * "/arduino/digital/13/1"   -> digitalWrite(13, HIGH)
  14.  * "/arduino/analog/2/123"   -> analogWrite(2, 123)
  15.  * "/arduino/analog/2"       -> analogRead(2)
  16.  * "/arduino/mode/13/input"  -> pinMode(13, INPUT)
  17.  * "/arduino/mode/13/output" -> pinMode(13, OUTPUT)
  18.  
  19.  This example code is part of the public domain
  20.  
  21.  http://arduino.cc/en/Tutorial/Bridge
  22.  
  23.  HTML code by naldin
  24.  naldin.net
  25.  xyzturbo.blogspot.com
  26.  
  27.  */
  28.  
  29. #include <Bridge.h>
  30. #include <YunServer.h>
  31. #include <YunClient.h>
  32.  
  33. // Listen on default port 5555, the webserver on the Yun
  34. // will forward there all the HTTP requests for us.
  35. YunServer server;
  36.  
  37. void setup() {
  38.   // Bridge startup
  39.   pinMode(13, OUTPUT);
  40.   pinMode(12, OUTPUT);
  41.   digitalWrite(13, LOW);
  42.   Bridge.begin();
  43.   digitalWrite(13, HIGH);
  44.  
  45.   // Listen for incoming connection only from localhost
  46.   // (no one from the external network could connect)
  47.   server.listenOnLocalhost();
  48.   server.begin();
  49. }
  50.  
  51. void loop() {
  52.   // Get clients coming from server
  53.   YunClient client = server.accept();
  54.  
  55.   // There is a new client?
  56.   if (client) {
  57.     // Process request
  58.     process(client);
  59.  
  60.     // Close connection and free resources.
  61.     client.stop();
  62.   }
  63.  
  64.   delay(50); // Poll every 50ms
  65. }
  66.  
  67. void process(YunClient client) {
  68.   // read the command
  69.   String command = client.readStringUntil('/');
  70.  
  71.   // is "digital" command?
  72.   if (command == "digital") {
  73.     digitalCommand(client);
  74.   }
  75.  
  76.   // is "analog" command?
  77.   if (command == "analog") {
  78.     analogCommand(client);
  79.   }
  80.  
  81.   // is "mode" command?
  82.   if (command == "mode") {
  83.     modeCommand(client);
  84.   }
  85. }
  86.  
  87. void digitalCommand(YunClient client) {
  88.   int pin, value;
  89.  
  90.   // Enable HTML
  91.   client.println("Status: 200");
  92.   client.println("Content-type: text/html");
  93.   client.println();
  94.  
  95.   // Read pin number
  96.   pin = client.parseInt();
  97.  
  98.   // If the next character is a '/' it means we have an URL
  99.   // with a value like: "/digital/13/1"
  100.   if (client.read() == '/') {
  101.     value = client.parseInt();
  102.     digitalWrite(pin, value);
  103.   }
  104.   else {
  105.     value = digitalRead(pin);
  106.   }
  107.  
  108.   // Send feedback to client
  109.   client.print(F("Pin D"));
  110.   client.print(pin);
  111.   client.print(F(" set to "));
  112.   client.println(value);
  113.  
  114.   // HTML script
  115.  
  116.   client.println("<HTML><HEAD><TITLE>xyzturbo.blogspot.com</TITLE></HEAD>");
  117.   client.println("<BR><BR>=======================<BR>");
  118.  
  119.   client.println("<BR>Liga/Desliga LED pin12:<BR>");
  120.   client.println("<a href='http://arduino.local/arduino/digital/12/1'>liga</a>");
  121.   client.println("<a href='http://arduino.local/arduino/digital/12/0'>desliga</a>");
  122.  
  123.   client.println("<BR><BR>Brilho do LED pin13:<BR>");
  124.   client.println("<a href='http://arduino.local/arduino/analog/13/255'>liga</a>");
  125.   client.println("<a href='http://arduino.local/arduino/analog/13/211'>83%</a>");
  126.   client.println("<a href='http://arduino.local/arduino/analog/13/169'>67%</a>");
  127.   client.println("<a href='http://arduino.local/arduino/analog/13/127'>50%</a>");
  128.   client.println("<a href='http://arduino.local/arduino/analog/13/85'>33%</a>");
  129.   client.println("<a href='http://arduino.local/arduino/analog/13/42'>17%</a>");
  130.   client.println("<a href='http://arduino.local/arduino/analog/13/0'>desliga</a>");
  131.  
  132.   client.println("<BR><BR>Controle Motor 1 pin3:<BR>");
  133.   client.println("<a href='http://arduino.local/arduino/analog/3/255'>liga</a>");
  134.   client.println("<a href='http://arduino.local/arduino/analog/3/211'>83%</a>");
  135.   client.println("<a href='http://arduino.local/arduino/analog/3/169'>67%</a>");
  136.   client.println("<a href='http://arduino.local/arduino/analog/3/127'>50%</a>");
  137.   client.println("<a href='http://arduino.local/arduino/analog/3/85'>33%</a>");
  138.   client.println("<a href='http://arduino.local/arduino/analog/3/42'>17%</a>");
  139.   client.println("<a href='http://arduino.local/arduino/analog/3/0'>desliga</a>");
  140. /*
  141.   client.println("<BR><BR>Controle Motor 2 pin9:<BR>");
  142.   client.println("<a href='http://arduino.local/arduino/analog/9/255'>liga</a>");
  143.   client.println("<a href='http://arduino.local/arduino/analog/9/211'>83%</a>");
  144.   client.println("<a href='http://arduino.local/arduino/analog/9/169'>67%</a>");
  145.   client.println("<a href='http://arduino.local/arduino/analog/9/127'>50%</a>");
  146.   client.println("<a href='http://arduino.local/arduino/analog/9/85'>33%</a>");
  147.   client.println("<a href='http://arduino.local/arduino/analog/9/42'>17%</a>");
  148.   client.println("<a href='http://arduino.local/arduino/analog/9/0'>desliga</a>");
  149. */
  150.   client.print("<BR></HTML>");
  151.  
  152.   // Update datastore key with the current pin value
  153.   String key = "D";
  154.   key += pin;
  155.   Bridge.put(key, String(value));
  156. }
  157.  
  158. void analogCommand(YunClient client) {
  159.   int pin, value;
  160.  
  161.   // Enable HTML
  162.   client.println("Status: 200");
  163.   client.println("Content-type: text/html");
  164.   client.println();
  165.  
  166.   // Read pin number
  167.   pin = client.parseInt();
  168.  
  169.   // If the next character is a '/' it means we have an URL
  170.   // with a value like: "/analog/5/120"
  171.   if (client.read() == '/') {
  172.     // Read value and execute command
  173.     value = client.parseInt();
  174.     analogWrite(pin, value);
  175.  
  176.     // Send feedback to client
  177.     client.print(F("Pin D"));
  178.     client.print(pin);
  179.     client.print(F(" set to analog "));
  180.     client.println(value);
  181.  
  182.     // HTML script
  183.  
  184.     client.println("<HTML><HEAD><TITLE>xyzturbo.blogspot.com</TITLE></HEAD>");
  185.     client.println("<BR><BR>=======================<BR>");
  186.  
  187.     client.println("<BR>Liga/Desliga LED pin12:<BR>");
  188.     client.println("<a href='http://arduino.local/arduino/digital/12/1'>liga</a>");
  189.     client.println("<a href='http://arduino.local/arduino/digital/12/0'>desliga</a>");
  190.  
  191.     client.println("<BR><BR>Brilho do LED pin13:<BR>");
  192.     client.println("<a href='http://arduino.local/arduino/analog/13/255'>liga</a>");
  193.     client.println("<a href='http://arduino.local/arduino/analog/13/211'>83%</a>");
  194.     client.println("<a href='http://arduino.local/arduino/analog/13/169'>67%</a>");
  195.     client.println("<a href='http://arduino.local/arduino/analog/13/127'>50%</a>");
  196.     client.println("<a href='http://arduino.local/arduino/analog/13/85'>33%</a>");
  197.     client.println("<a href='http://arduino.local/arduino/analog/13/42'>17%</a>");
  198.     client.println("<a href='http://arduino.local/arduino/analog/13/0'>desliga</a>");
  199.  
  200.     client.println("<BR><BR>Controle Motor 1 pin3:<BR>");
  201.     client.println("<a href='http://arduino.local/arduino/analog/3/255'>liga</a>");
  202.     client.println("<a href='http://arduino.local/arduino/analog/3/211'>83%</a>");
  203.     client.println("<a href='http://arduino.local/arduino/analog/3/169'>67%</a>");
  204.     client.println("<a href='http://arduino.local/arduino/analog/3/127'>50%</a>");
  205.     client.println("<a href='http://arduino.local/arduino/analog/3/85'>33%</a>");
  206.     client.println("<a href='http://arduino.local/arduino/analog/3/42'>17%</a>");
  207.     client.println("<a href='http://arduino.local/arduino/analog/3/0'>desliga</a>");
  208. /*
  209.     client.println("<BR><BR>Controle Motor 2 pin9:<BR>");
  210.     client.println("<a href='http://arduino.local/arduino/analog/9/255'>liga</a>");
  211.     client.println("<a href='http://arduino.local/arduino/analog/9/211'>83%</a>");
  212.     client.println("<a href='http://arduino.local/arduino/analog/9/169'>67%</a>");
  213.     client.println("<a href='http://arduino.local/arduino/analog/9/127'>50%</a>");
  214.     client.println("<a href='http://arduino.local/arduino/analog/9/85'>33%</a>");
  215.     client.println("<a href='http://arduino.local/arduino/analog/9/42'>17%</a>");
  216.     client.println("<a href='http://arduino.local/arduino/analog/9/0'>desliga</a>");
  217. */
  218.     client.print("<BR></HTML>");
  219.  
  220.     // Update datastore key with the current pin value
  221.     String key = "D";
  222.     key += pin;
  223.     Bridge.put(key, String(value));
  224.   }
  225.   else {
  226.     // Read analog pin
  227.     value = analogRead(pin);
  228.  
  229.     // Send feedback to client
  230.     client.print(F("Pin A"));
  231.     client.print(pin);
  232.     client.print(F(" reads analog "));
  233.     client.println(value);
  234.  
  235.  
  236.     // Update datastore key with the current pin value
  237.     String key = "A";
  238.     key += pin;
  239.     Bridge.put(key, String(value));
  240.   }
  241. }
  242.  
  243. void modeCommand(YunClient client) {
  244.   int pin;
  245.  
  246.   // Read pin number
  247.   pin = client.parseInt();
  248.  
  249.   // If the next character is not a '/' we have a malformed URL
  250.   if (client.read() != '/') {
  251.     client.println(F("error"));
  252.     return;
  253.   }
  254.  
  255.   String mode = client.readStringUntil('\r');
  256.  
  257.   if (mode == "input") {
  258.     pinMode(pin, INPUT);
  259.     // Send feedback to client
  260.     client.print(F("Pin D"));
  261.     client.print(pin);
  262.     client.print(F(" configured as INPUT!"));
  263.     return;
  264.   }
  265.  
  266.   if (mode == "output") {
  267.     pinMode(pin, OUTPUT);
  268.     // Send feedback to client
  269.     client.print(F("Pin D"));
  270.     client.print(pin);
  271.     client.print(F(" configured as OUTPUT!"));
  272.     return;
  273.   }
  274.  
  275.   client.print(F("error: invalid mode "));
  276.   client.print(mode);
  277. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement