Arduino 传感器 API 网络服务器

问题描述

当我将此代码加载到我的 Arduino 中时,他连接到 WiFi 并出现在我的 IP 扫描仪上。但是当我在 FireFox 中打开设备的 IP 时,没有任何负载。 (http://10.0.0.40/env) 我的代码是否有问题,或者它不是这样工作的。我有一个传感器,可以读取温度和湿度。这两个值应该在我的网络中可用于 fetch()。使用 Javascript 我想在我的本地 html 页面显示这些。网络凭据只是经过审查。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class TestApp {

    private JComboBox<String> jComboBox1;
    private final ArrayList<String> listofNames = new ArrayList<>();

    public TestApp() {
        listofNames.add("David Kroukamp");
        listofNames.add("Abra");
        listofNames.add("Camickr");
        listofNames.add("Hovercraft Full Of Eels");
        listofNames.add("Andrew Thompson");
        listofNames.add("MadProgrammer");
        listofNames.add("TrashGod");
        listofNames.add("Gilbert Le Blanc");
        listofNames.add("mKorbel");
        listofNames.add("kleopatra");
        listofNames.add("Reimeus");
        listofNames.add("StanislavL");
        listofNames.add("Paul Samsotha");
        listofNames.add("Guillaume Polet");
        createAndShowGui();
    }

    public static void main(String[] args) {
        SwingUtilities.invokelater(TestApp::new);
    }

    private void createAndShowGui() {
        JFrame frame = new JFrame("TestApp");
        frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);

        jComboBox1 = new JComboBox<>(new DefaultComboBoxModel(listofNames.toArray()));

        JLabel nameLabel = new JLabel("Name:");
        JTextField textField = new JTextField(20);
        textField.getDocument().addDocumentListener(new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent e) {
                comboFilter(textField.getText());
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                comboFilter(textField.getText());
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                // plain text components dont fire this
            }
        });

        JButton showKeyboardButton = new JButton("Show Keyboard");
        showKeyboardButton.addActionListener((ActionEvent e) -> {
            new DialogVirtualKeyboardReal(frame,true,textField);
        });

        JPanel panel = new JPanel();
        panel.add(nameLabel);
        panel.add(textField);
        panel.add(showKeyboardButton);

        frame.add(panel,BorderLayout.CENTER);
        frame.add(jComboBox1,BorderLayout.soUTH);
        frame.pack();
        frame.setVisible(true);

        new DialogVirtualKeyboardReal(frame,false,textField);
    }

    public void comboFilter(String enteredText) {
        List<String> filterarray = new ArrayList<>();

        listofNames.forEach((item) -> {
            if (item.contains(enteredText)) {
                filterarray.add(item);
            }
        });

        if (filterarray.size() > 0) {
            jComboBox1.setModel(new DefaultComboBoxModel(filterarray.toArray()));
            //jComboBox1.showPopup();
        } else {
            //jComboBox1.hidePopup();
        }
    }
}

解决方法

您发布的 loop() 代码如下所示:

void loop() {
  // put your main code here,to run repeatedly:
delay(2000);
float temperature = dht.readTemperature();
float humidty = dht.readHumidity();

}

您没有包含允许 Web 服务器运行所需的代码。网络服务器需要有机会在 loop() 期间运行,否则它无法为请求提供服务。

您的 loop() 需要包含 server.handleClient()

您可以看到此 in basic examples 显示如何使用 WebServer

一旦您添加了该代码,您就需要重写 loop(),不要总是延迟两秒,否则您将延迟网络服务器以及传感器读取。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...