udp服务器实时显示温湿度,python通过udp协议获取arduino温湿度信息

该代码示例展示了如何使用Arduino和DHT11传感器读取温湿度数据,并通过UDP协议进行网络通信。程序首先初始化Ethernet和UDP连接,然后设置DHT11传感器。在循环中,程序读取传感器数据并监听UDP包。接收到特定指令后,根据指令类型返回相应的温度或湿度信息。这是一个结合物联网与嵌入式设备的实践案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include

#include          // needed for Arduino versions later than 0018

#include

#include          // UDP library from: [email]bjoern@cs.stanford.edu[/email] 12/30/2008

#define DHTPIN 2     // what pin we're connected to

#define DHTTYPE DHT11   // DHT 11

// 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, 0xFE, 0xED };

IPAddress ip(192, 168, 2, 177);

unsigned int localPort = 8000;      // local port to listen on

// buffers for receiving and sending data

char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,

char  ReplyBuffer[UDP_TX_PACKET_MAX_SIZE];       // a string to send back

char tempBuf[UDP_TX_PACKET_MAX_SIZE];

// An EthernetUDP instance to let us send and receive packets over UDP

EthernetUDP Udp;

DHT dht(DHTPIN, DHTTYPE);

void setup() {

// start the Ethernet and UDP:

Ethernet.begin(mac,ip);

Udp.begin(localPort);

dht.begin();

Serial.begin(9600);

}

float getHumidity()

{

float h = dht.readHumidity();

if(isnan(h))

{

return 0;

}

return h;

}

float getTemperature()

{

float t = dht.readTemperature();

if(isnan(t))

{

return 0;

}

return t;

}

void loop() {

float h=0.0,t=0.0;

//float h = dht.readHumidity();

//float t = dht.readTemperature();

/* if (isnan(t) || isnan(h))

{

Serial.println("Failed to read from DHT");

}

else

{

Serial.print("Humidity: ");

Serial.print(h);

Serial.print(" %\t");

Serial.print("Temperature: ");

Serial.print(t);

Serial.println(" *C");

}*/

// if there's data available, read a packet

int packetSize = Udp.parsePacket();

if(packetSize)

{

Serial.print("Received packet of size ");

Serial.println(packetSize);

Serial.print("From ");

IPAddress remote = Udp.remoteIP();

for (int i =0; i < 4; i++)

{

Serial.print(remote[i], DEC);

if (i < 3)

{

Serial.print(".");

}

}

Serial.print(", port ");

Serial.println(Udp.remotePort());

// read the packet into packetBufffer

Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);

switch(packetBuffer[0])

{

case '0':  //control

break;

case '1':  //informaiton

switch(packetBuffer[1])

{

case '0': //temperature and humility

switch(packetBuffer[2])

{

case '1':

h=getHumidity();

dtostrf(h,10,2,tempBuf);

sprintf(ReplyBuffer,"100humidity:%s",tempBuf);

break;

case '0':  //temperature

t=getTemperature();

dtostrf(t,10,2,tempBuf);

sprintf(ReplyBuffer,"100Temperature:%s",tempBuf);

break;

/*case :  //humility

float h=getHumidity();

sprintf(ReplyBuffer,"101Humidity:%f\n",h);

break;*/

}

break;

case '1': //air controler

break;

}

break;

default:

Serial.println("Error");

}

Serial.println("Contents:");

Serial.println(packetBuffer);

memset(packetBuffer,'\0',UDP_TX_PACKET_MAX_SIZE);

// send a reply, to the IP address and port that sent us the packet we received

Serial.println(ReplyBuffer);

Udp.beginPacket(Udp.remoteIP(),Udp.remotePort());

Udp.write(ReplyBuffer);

Udp.endPacket();

}

delay(10);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值