没什么背景,纯粹想玩。
能够在指定web页面上查看我实验室的温湿度。
将W5100网络扩展板插在Arduino Uno上,然后将DHT11模块连接至Arduino,信号线接至数字2号口。
以下是本人的成品图。
将网络模块连接至路由器。
刷入以下代码。
- #include <SPI.h>
- #include <Ethernet.h> //网络模块头文件
- #include <dht11.h> //温湿度模块库文件
-
- #define SENSORPIN 2 //定义传感器引脚
-
- //定义本机MAC地址和IP,IP子网必须与局域网一致
- byte mac[] = { 0xDE, 0xAD, 0xBE, 0xE8, 0xFE, 0xED };
- IPAddress ip(192, 168, 1, 30);
-
- dht11 sensor;
-
- EthernetServer server(80); //开启80端口
-
- void setup() {
- Serial.begin(115200); //串口用于监控
- Ethernet.begin(mac, ip);
- server.begin();
- }
-
- void loop() {
- EthernetClient client = server.available();
-
- //当有连接传入,即开始传递数据
- if (client) {
- Serial.println("Incoming...\n");
- if (client.connected()) {
-
- //等待客户端请求结束
- while (client.available()) {
- char charget = client.read();
- Serial.write(charget);
- }
-
- sensor.read(SENSORPIN); //读取温湿度数据
-
- //返回html页面
- client.println("HTTP/1.1 200 OK");
- client.println("Content-Type: text/html");
- client.println("Connection: close");
- client.println();
- client.println("<!DOCTYPE HTML>");
- client.println("<html>");
- client.println("Here is Villivateur Von's laboratory!");
- client.println("<br />");
- client.println("<br />");
- client.println("<br />");
- client.println("Humidity (%): ");
- client.println("<br />");
- client.println((float)sensor.humidity, 2);
- client.println("<br />");
- client.println("<br />");
- client.println("Temperature (C): ");
- client.println("<br />");
- client.println((float)sensor.temperature, 2);
- client.println("<br />");
- client.println("</html>");
- }
- delay(1);
- client.stop();
- Serial.println("client disonnected");
- }
- }
-
部分库文件可能不属于Arduino标准库,可能需要手动下载。(淘宝卖家会提供)
同一局域网访问http://192.168.1.30,即可看到如下页面:
在同一内网内启动一个frp客户端,连接至已有的frp服务器:
添加以下配置:
- #frpc.ini
-
- [ardu_uno]
- type = tcp
- local_port = 80
- local_ip = 192.168.1.30
- remote_port = 22222
-
$nohup ./frpc &
此时,已经可以通过<公网ip>:22222访问。
在公网服务器Nginx中添加如下配置:
- server {
- listen 80;
-
- server_name iot.vvzero.com;
-
- location / {
- proxy_pass http://frp.vvzero.com:22222;
- }
- }
-
即可。