代码之家  ›  专栏  ›  技术社区  ›  Jakub Nechvátal

js文件与esp32草图之间的数据发送

  •  0
  • Jakub Nechvátal  · 技术社区  · 2 年前

    我想使用esp32作为web服务器在浏览器中显示信息。 我有一个esp32草图,可以处理来自传感器的一些数据,我想将它们流式传输到js文件中,这样我就可以将它们显示在网页上,作为定期更新的图形。 我的问题是,无论我尝试什么,我都不知道如何在两个文件之间传输数据。 需要帮忙吗? 感谢您提前回复!

    1 回复  |  直到 2 年前
        1
  •  1
  •   Monstermash    2 年前

    很抱歉发布了答案,我没有必要的级别进行评论

    首先,我很抱歉地告诉您,即使您实时更新javascript文件,其内容也不会加载到web上。

    但您可以通过WebSocket服务器将更新的传感器数据发送到javascript客户端,然后更新您的界面

    这是我以前做过的一个小WS-library,它简单但功能强大

    export const ws = (url) => {
        let ws = null
        let connectListeners = []
        let receiveListeners = []
        let retryCount = 1
        const api = {
            connect(newUrl, attemps = -1) {
                if (ws != null) {
                    ws.onmessage = null
                    ws.onerror = null
                    ws.onclose = null
                    ws.onopen = null
                }
                return new Promise((resolve, reject) => {
                    ws = new WebSocket(newUrl || url)
                    ws.onopen = (e) => {
                        connectListeners.forEach(cbk => {
                            cbk(e)
                        })
                        resolve(api)
                    }
                    ws.onmessage = (e) => {
                        let data = e.data
                        try {
                            data = JSON.parse(data)
                        } catch (e) {}
    
                        receiveListeners.forEach(cbk => {
                            cbk(data)
                        })
                    }
                    ws.onerror = (e) => {
                        if (attemps > 0 && retryCount < attemps) {
                            retryCount++
                            api.connect(newUrl, attemps)
                        } else if (attemps < 0) {
                            api.connect(newUrl, attemps)
                        } else {
                            reject(e)
                        }
                    }
                })
            },
            onconnect(e) {
                connectListeners.push(e)
            },
            onreceive(e) {
                receiveListeners.push(e)
            },
            send(data) {
                if (ws.readyState == WebSocket.OPEN) {
                    ws.send(JSON.stringify(data))
                }
                return this;
            },
            close(forced = false) {
                if (forced) {
                    this.connect()
                } else {
                    ws.close()
                }
                return this;
            }
        }
        return api;
    }
    

    然后你可以使用它如下

    const wsClient = ws('ws://your-esp32-ip/')
    wsClient.onreceive(function(data){
        console.log(data)
    })
    wsClient.connect() // you can pass a new connection url and number of connection attemps
    
    推荐文章