Arduino通过以太网提供数据的主题似乎已在以下几个方面进行了讨论:
1)Arduino ethernet communication
和
2)Dumping data over ethernet with an arduino client / python server
我最喜欢的方式是第一篇文章中提到的Arduino WebClient选项:
https://www.arduino.cc/en/Tutorial/WebClient
第二篇文章涉及一些Python(2.7),但似乎并没有解决问题。我也想知道wget是否更容易。
如果您有一个Arduino充当提供信息的简单服务器:
/*
Simply put out data as a server
*/
#include <SPI.h>
#include <Ethernet.h>
unsigned long current_time;
unsigned long old_time;
// Ethernet stuff
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0x12, 0x34
};
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
boolean notYetConnected;
// IP Address is set here
IPAddress ip(192, 168, 3, 50);
void setup()
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
{
int i;
Serial.begin(9600);
// Ethernet option
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("# For Ethernet connection, server is at ");
Serial.println(Ethernet.localIP());
Serial.print("# \n");
}
void loop()
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
{
int i;
current_time = millis();
// dump data every 100 ms
if ((current_time - old_time) > 100)
{
// data from sensor spoofed here
int datavalue = random(0, 100);
Serial.print(current_time);
Serial.print(",");
Serial.print(datavalue);
Serial.print("\n");
server.print(current_time);
server.print(",");
server.print(datavalue);
server.print("\n");
// get delta time
old_time = current_time;
}
}
...您可以使用'wget 192.168.3.50'来获取转储到文件的数据(默认为index.html)。
这不是典型的客户端/服务器,程序要求提供信息,然后返回;服务器只是转储数据,你可以将网络浏览器指向IP地址,或者,如上所示,使用wget。
当您设置并忘记'wget命令时,数据记录得非常好。我只做了1.75+小时的测试,得到了60K +线(每100毫秒一次),系统正常工作。
我注意到如果我停止'wget'命令并重新启动它,几次之后,wget进程会挂起,我必须重置我的Arduino。
完整的客户端 - 服务器程序似乎是一种更好的方式:
https://giovanniorgantini.wordpress.com/2015/03/14/getting-data-over-the-internet-with-arduino/
...我现在正在研究这个问题(原来的客户端在C中,如果有人可以指向一个简单的python-Arduino程序,否则,我会看一个简单的python客户端),但是想知道:
1)为什么停止'wget'(control-C)会导致重启wget进程时出现问题,系统会挂起:
user @ machine:$ wget 192.168.3.50 --2018-02-12 19:58:54-- http://192.168.3.50/连接到192.168.3.50:80 ......
停止数据流的一个原因是您停止测试,或者以编程方式启动另一个数据文件。
2)是否可以解析wget输出,以便数据可以每N个数据点或N秒保存在文件中?
客户端 - 服务器方法似乎是要走的路,但上面的例子似乎只能使用Web浏览器或单个命令行函数。对于某些应用程序,这似乎更容易使用。
这是一个简单的应用程序,仅用于从一组传感器转储数据。
在我的研究中,我也见过UDP客户端服务器:
不知道是否有一种首选方式。
答案 0 :(得分:0)
如果你在没有特定客户端的网络上扔东西,我认为UDP可能是更好的选择。
至于限制文件大小,我建议使用logrotate,如此答案所示 - https://unix.stackexchange.com/questions/17209/how-to-limit-log-file-size-using