Python 通过Ethernet shield将数据从Arduino发送到Web服务器

Python 通过Ethernet shield将数据从Arduino发送到Web服务器,python,web,arduino,server,dhcp,Python,Web,Arduino,Server,Dhcp,我有一个带以太网屏蔽的Arduino,它与我的计算机连接到同一个集线器。 我试图让这个Arduino发送一些HTTP请求到用Python编写的web服务器 我将我的电脑的IP地址改为192.168.1.2,Arduino将自动获得IP地址,如果无法获得新的IP地址,它将获得静态IP地址 Web服务器部分:我测试了我的Web服务器,当我调用该请求时,它会将记录保存到数据库中(我使用mongodb作为我的数据库) Arduino部分:我进行了测试,发现它可以连接到我的DHCP服务器,而不是我的web

我有一个带以太网屏蔽的Arduino,它与我的计算机连接到同一个集线器。 我试图让这个Arduino发送一些HTTP请求到用Python编写的web服务器

我将我的电脑的IP地址改为192.168.1.2,Arduino将自动获得IP地址,如果无法获得新的IP地址,它将获得静态IP地址

Web服务器部分:我测试了我的Web服务器,当我调用该请求时,它会将记录保存到数据库中(我使用mongodb作为我的数据库)

Arduino部分:我进行了测试,发现它可以连接到我的DHCP服务器,而不是我的web服务器,因为它发送了一个请求并从DHCP服务器获得响应

如何配置以便我的DHCP服务器可以将Arduino的请求直接传输到我的web服务器?或者其他解决方案,比如让我的Arduino直接将数据发送到我的web服务器

我的web服务器的小代码:

#/usr/bin/env python2.7
#-*-编码:utf-8-*-
从瓶子进口*
从pymongo进口*
导入日期时间
@路由('/hello')
def hello():
返回“你好,世界!”
@get('/receiver',method='get')
def接收器():
#从http请求中获取数据并将其保存到数据库中
打印“插入数据”
receiver_id=request.query.getall('id'))
广播者id=request.query.getall('bid'))
信号强度=request.query.getall('s')
client=MongoClient('localhost',27017)
db=客户端['arduino']
集合=db['arduino']
记录={'receiver\u id':receiver\u id,
“播音员id”:播音员id,
“信号强度”:信号强度,
“日期”:datetime.datetime.utcnow()}
打印记录
集合。插入一个(记录)
返回模板('Record:{{Record}}',Record=Record)
@获取('/db')
def db():
#显示所有数据
client=MongoClient('localhost',27017)
db=客户端['arduino']
集合=db['arduino']
对于集合中的记录。查找():
返回模板(“{receiver\u id}}”,receiver\u id=record)
@错误(404)
def error404(错误):
返回“出现问题,请重试!”
运行(host='localhost',port=80,debug=True)
我的Arduino项目的小代码:

/*
使用DHCP连接到以太网
作者:-嵌入式实验室
*/
#包括
#包括
#定义ETH_CS 10
#定义SD_CS 4
//在下面输入控制器的MAC地址。
//较新的以太网屏蔽在屏蔽上的标签上印有MAC地址
字节mac[]={0xCA,0xFE,0x00,0x00,0x00,0x15};
ip地址ip(192168,1,15);
IP地址服务器(192168,1,2);
//字符服务器[]=“本地主机”;
以太网络客户端;
无效设置()
{
Serial.begin(9600);
Serial.println(“启动以太网连接”);
引脚模式(ETH_CS,输出);
引脚模式(SD_CS,输出);
digitalWrite(ETH_CS,低);//选择以太网模块。
digitalWrite(SD_CS,高);//取消选择内部SD卡
if(Ethernet.begin(mac)==0)//在DHCP模式下启动
{
Serial.println(“无法使用DHCP配置以太网,使用静态模式”);
//如果DHCP模式失败,则以静态模式启动
以太网开始(mac,ip);
}
Serial.print(“我的IP地址:”);
对于(字节thisByte=0;thisByte<4;thisByte++)
{
//打印IP地址每个字节的值:
Serial.print(Ethernet.localIP()[thisByte],DEC);
连续打印(“.”);
}
Serial.println();
//给以太网屏蔽一秒钟进行初始化:
延迟(1000);
Serial.println(“连接…”);
对于(int i=1;i<6;i++){
序列号打印(“测试编号”);
序列号println(i);
//如果您获得连接,请通过串行方式报告:
if(客户端连接(服务器,80))
{
Serial.println(“已连接”);
//发出HTTP请求:
//client.println(“GET/receiver?id=4&bid=3&s=70http/1.1”);
client.println(“GET/HTTP/1.1”);
client.println(“主机:localhost”);
client.println(“连接:关闭”);
client.println();
延迟(1000);
}
其他的
{
//如果您没有连接到服务器:
Serial.println(“连接失败”);
}    
} 
}
void循环()
{
//如果有可用的传入字节
//从服务器读取并打印它们:
if(client.available())
{
char c=client.read();
客户。写(c);
Serial.print(“读取客户端:”);
连续打印(c);
}
//只要串行队列中有字节,
//阅读并在插座打开时将其发送出去:
while(Serial.available()>0)
{
char inChar=Serial.read();
if(client.connected())
{
客户机打印(英制);
}
}
//如果服务器已断开连接,请停止客户端:
如果(!client.connected()){
Serial.println();
Serial.println(“断开”);
client.stop();
//什么也不做:
虽然(正确);
}
}
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-

from bottle import *
from pymongo import *
import datetime


@route('/hello')
def hello():
    return "Hello World!"


@get('/receiver', method = 'GET')
def receiver():
    # Get data from http request and save it into db
    print 'Inserting data'
    receiver_id = request.query.getall('id')
    broadcaster_id = request.query.getall('bid')
    signal_strength = request.query.getall('s')
    client = MongoClient('localhost', 27017)
    db = client['arduino']
    collection = db['arduino']
    record = {'receiver_id':receiver_id,
              'broadcaster_id':broadcaster_id,
              'signal_strength':signal_strength,
              'date': datetime.datetime.utcnow()}
    print record
    collection.insert_one(record)
    return template('Record: {{record}}', record = record)

@get('/db')
def db():
    # Display all data
    client = MongoClient('localhost', 27017)
    db = client['arduino']
    collection = db['arduino']
    for record in collection.find():
        return template('<div>{{receiver_id}}</div>',receiver_id = record)

@error(404)
def error404(error):
    return 'Something wrong, try again!'

run(host='localhost', port=80, debug=True)