簡體   English   中英

js文件和esp32 sketch之間的數據發送

[英]Data sending between js file and esp32 sketch

我想使用 esp32 作為 web 服務器在瀏覽器中顯示信息。 我有一個處理來自傳感器的一些數據的 esp32 草圖,我想將它們 stream 放入 js 文件中,以便我可以將它們顯示在 web 頁面上作為定期更新的圖表。 我的問題是,無論我嘗試什么,我都無法弄清楚如何在兩個文件之間匯集數據。 有什么幫助嗎? 提前感謝所有回復!

抱歉發布答案,我沒有評論所需的級別

首先,很遺憾地告訴您,即使您實時更新javascript文件,其內容也不會加載到web上。

但您可以通過 WebSocket 服務器將更新的傳感器數據發送到 javascript 客戶端,然后更新您的界面

這是我以前做過的一個小 WS 庫,它簡單但實用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM