Arduino 传感器 API 网络服务器

时间:2020-12-22 18:36:57

标签: api arduino webserver esp32 arduinojson

当我将此代码加载到我的 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();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您发布的 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(),不要总是延迟两秒,否则您将延迟网络服务器以及传感器读取。