1

作为 Pebble/Ajax/Java Script/Python 新手,我正在编写非常基本的代码,以便在 Pebble 手表上接收 Raspberry Pi 传感器读数:

我正在执行从 Pebble 到 Raspberry Pi Python 服务器的简单 Ajax 请求,但未能获得任何响应(客户端/服务器代码如下)。

但是,当我打开 Web 浏览器并输入 Raspberry Pi 的本地 url 时,Raspberry 服务器会成功响应,例如。192.168.1.80:9999: {"Pi 响应":"Hello World!}"

当我将本地 URL 从 192.168.1.80 更改为远程网页 ( http://if.christianbirch.dk/helloworld.php ) 上的一个非常简单的 php 脚本时,Pebble 响应也成功:[PHONE] pebble-app .js:?: {"Web 响应":"Hello World!"}

我已经在许多论坛中搜索了解决方案,但没有运气。但是,我怀疑本地 URL 或端口号在 Ajax 脚本中以某种方式错误地定义 - 或者 Raspberry Pi Python 脚本可能缺少标题语句。

任何经验。这个问题?先感谢您!


Pebble JS 脚本:


var ajax = require('ajax');

ajax(
{
url: 'http://192.168.1.80', // *** Valid reponse is received when changing this URL to http://if.christianbirch.dk/helloworld.php ***
method: 'get',
type: 'json',
port:'9999'
},
function(data) {
// Success!
console.log(JSON.stringify(data));
},
function(error) {
// Failure!
console.log('No response!');
}
);

Python 服务器脚本(从 Web 浏览器调用时收到的有效响应) https://docs.python.org/2/library/socketserver.html


import SocketServer

class MyTCPHandler(SocketServer.BaseRequestHandler):
 def handle(self):
   self.reqdata = self.request.recv(1024).strip()
   print self.reqdata
   self.send('{"Pi Reponse":"Hello world!"}')
 def send(self.content):
   self.request.sendall('HTTP/1.0 200 OK\n\n{}.format(content))

if __name__ == "__main__":
  HOST, PORT = "0.0.0.0", 9999
  server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
  server.serve_forever() 
4

1 回答 1

0

正如您似乎已经发现的那样,在 CloudPebble 中,基于 Web 的模拟器没有本地网络访问权限。要将 CloudPebble 与本地网络应用程序开发一起使用,您需要将您的手机设置为编译目标。我在针对我的 Pi 进行开发时也遇到了这个问题。

于 2015-09-05T21:18:17.433 回答