0

I'm trying to set up a simple web-server with Arduino Yun without an SD card, i.e via REST, if I understood it right (I'm new to some of these stuff). I want to be able to "get" data (sent by Arduino) through a jQuery script and show the user a formatted HTML page.

Here I provide you a simplified version of my Arduino sketch:

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>
const byte internalLED = 13;
YunServer server;
void setup() {
 pinMode(internalLED, OUTPUT);
 digitalWrite(internalLED, HIGH); // Turn the led on to advise about bridge begin in progress
 Bridge.begin(); // Let's activate the Yun Bridge...
 ledBlink(150); // ...bridge activation done (user sees a blink)
 // server.listenOnLocalhost(); // Listen for incoming connection only from localhost (no one from the external network could connect)
 server.begin(); // Let's acrivate the Yun server...
 ledBlink(150); // ...server activation done (user sees a blink)
}
void loop() {
 YunClient client = server.accept(); // Get clients coming from server
 if (client) // Is there a new client?
 {
 client.print(77); // Send a "77" to client (e.g. browser)
 client.stop(); // Close connection and free resources.
 ledBlink(500);
 }
 delay(50);
}
void ledBlink(int delayTime) {
 digitalWrite(internalLED, HIGH); // Turn (or keep) the LED on
 delay(delayTime);
 digitalWrite(internalLED, LOW); // Turn (or keep) the LED off
 delay(delayTime);
}

My Arduino Yun is connected via WiFi with static IP (192.168.1.98) to the same network of my laptop, and they can ping each other. Right now, if I insert into my browser the address

http://192.168.1.98/arduino/whatever

I correctly receive a simple «77» (no quotes or \r\n)

But I cannot "get" it when opening the page get_test.html (which is on my harddisk, not in the SD):

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
 $.get("http://192.168.1.98/arduino/whatever", {}, function(data,status){
 alert("Data: " + data + "\nStatus: " + status);
 });
</script>
</head>
<body></body>
</html>

This is strange to me because this html code works if I change the address inside the "get" request with https://dl.dropboxusercontent.com/u/12389503/demo_test.txt which consists only of a «21» (no \r\n). The problem is I don't even receive the alert when the address is the IP of Arduino, but the board is receiving the request since I can see the led blinking once, as expected. I'm running out of tests, any suggestion is welcome.

asked Sep 19, 2014 at 13:41

1 Answer 1

0

Whenever making ajax calls from/to different hosts (as your pc and the yun) you should use JSONP.

answered Sep 19, 2014 at 14:47
1
  • 1
    Thank you, I finally got it working today. I created a JSONP message as you told me. I changed in the sketch from client.print(77); to client.println("temperature({\"value\": 77});");. My jQuery request is now $.ajax({url: 'http://192.168.1.98/arduino/api/temperature', dataType: 'jsonp', jsonpCallback: 'temperature', success: function(result){alert("Value received through JSONP is "+result.value)}}); Commented Sep 25, 2014 at 16:14

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.