BeagleBone Black–ESP8266 UDP 服務

来源:http://www.cnblogs.com/leptonation/archive/2016/02/02/5176668.html
-Advertisement-
Play Games

NodeMCU 的文檔裡面終於發現,ESP8266 的GPIO 2 確實是 PIN 4,GPIO 0 是 PIN 3。 https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_cn 話說,這個 API 不是給地球人看的。按照說明,ne...


NodeMCU 的文檔裡面終於發現,ESP8266 的GPIO 2 確實是 PIN 4,GPIO 0 是 PIN 3。

image

https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_cn

話說,這個 API 不是給地球人看的。按照說明,net.createServer 返回的是 Server,事實上,如果用 UDP,按照裡面的代碼你死活乾不出來的。終於在 www.esp8266.com 論壇裡面找到了答案,本篇的內容就是描述 UDP 在 NodeMCU 裡面的正確姿勢。

接線、BBB 開 UART,和 minicom 相關的,請看上幾篇。首先我直接上代碼。

LUA 代碼

init.lua

print('init.lua ver 0.9')
wifi.setmode(wifi.STATION)
print('set mode=STATION (mode='..wifi.getmode()..')')
print('MAC: ',wifi.sta.getmac())
print('chip: ',node.chipid())
print('heap: ',node.heap())
wifi.sta.config('SSID','PWD')
dofile('main.lua')

init.lua 是啟動後執行的用戶程式代碼,wifi 設成 station 模式(另外可以是 AP 模式的),然後設置 SSID 和密碼,如果你想試,代碼裡面的 wifi.sta.config 需要改為正確值。代碼的最後一句是讓它執行另一個 lua 代碼檔。

main.lua

print('Connecting...')
tmr.alarm(0, 1000, 1, function()
        if wifi.sta.getip() ~= nil then
        print('IP: ',wifi.sta.getip())
        tmr.stop(0)
        dofile('udp.lua')
        end
end)

這個沒什麼,每秒鐘看一遍是否已經連上了無線路由,如果連上了,就執行另一個代碼檔。(又一個檔案?有點多餘是吧,這是我個人癖好,我每個單獨測試的)

udp.lua

sv=net.createServer(net.UDP,0)
sv:on('receive', function(c,pl)
        print(pl)
        r=cjson.decode(pl)
        if r.cmd == '0' then
                print('I got a ZERO cmd.')
                c:send('{\"cmd\":\"2\",\"GUID\":\"24F92\",\"dType\":\"powerPlug\"}')
        end
end)
sv:listen(4000)
print('Server started')

關鍵就是這個 on 方法。你看官方 API,on 是 socket 的方法,不是 server 的。而 net.createServer 按照官方說明,是返回 server 的。就是說,如果按照官方說明,我這代碼是錯誤的。我是看了 http://www.esp8266.com/viewtopic.php?f=24&t=645 這裡才知道這“錯誤”做法…。

上傳代碼

我代碼是用 vim 在 BBB 裡面寫的,保存在 BBB,然後用 luatool 寫入。https://github.com/4refr0nt/luatool。python 而已,git clone 下來就能用,裡面還有個 telnet 代碼示範。這 luatool 其實是幫我操作 NodeMCU 命令並且轉換代碼而已。運行時加 –v 參數你就知道它是幹嘛的了。

image

用法是 python luatool.py –p /dev/ttyO2 –b 9600 –f XXX.lua –v

-p 是串口埠,-b 是 baud,-f 是本機的代碼檔,-v 是顯示過程。很明顯它只不過調用 NodeMCU 的lua 命令而已,而它最不好的地方是,它會等待 NodeMCU 反應返回字元來判斷操作有沒有順利執行。如果你像我一樣,有東西在裡面跑,有 print 的話,就會出現些錯誤,因為 print 和這 luatool 的響應混在一起了。

效果

不用 BBB,從 Windows,通過無線路由,直接發 UDP 給 ESP8266,開著 BBB 的 minicom 看看這些 debug (呃,print)信息。我首先發了 cmd: 1 和 2 字元過去,反應正常,也正確 print 了出來。然後 cmd:0,它正確的回傳了自己的身份,powerPlug。沒錯,我準備玩智能插座。

image

廣播一樣 no problem:

image

今天到此為止。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 自己的理解:用GO隔開,就相當於在不同的查詢視窗里執行SQL,GO需要單獨提交事務的 整理時參考博文: http://www.cnblogs.com/kissdodog/p/3163880.html http://lockrock.blog.51cto.com/2147255/775783 批處理是
  • 一、 概述 MySQL從3.23.15版本以後提供資料庫複製(replication)功能,利用該功能可以實現兩個資料庫同步、主從模式、互相備份模式的功能 二、 環境 操作系統:Linux 2.6.23.1-42.fc8 # SMP(不安裝XEN) Mysql版本:5.0.45-4.fc8 設備環境
  • logstash是一個強大的分析後端日誌的開源軟體,本文詳細介紹了logstash的配置和圖表使用,通過對訪問日誌的分析,能夠抓取用戶的地域分佈、使用的終端、感興趣的功能,介面的訪問時間排序,或者是異常檢測等等,而這些可以通過圖表的方式很直觀地展示出來,還可以進行關聯操作。
  • 內連接 左連接 右連接 全連接 交叉連接
  • 一、簡介 Linux的聲音系統或許是最無序的子系統部分!作為Server來說,聲音無足輕重,無人問津,而作為桌面來說太多的實現方案,各有各的長出和不足,ALSA經過多年的發展,基本統一了Linux音效卡硬體驅動層的藉口,OSS日漸退出,但是在ALSA之上的各個應用層面,方案和軟體之多讓人咋舌!ESD,...
  • 1.下載jdk.tar.gz文件 2.解壓jdk 命令:$sudo tar zxvf ./jdk.tar.gz 3.將解壓後的jdk放在/usr/lib/jvm下 4.查看本機是否還有jiava可選 命令:$sudo update-altematives--list java 如果沒有,下一步 5.
  • 問題描述: 我的 Arch Linux 已經用了快半年多,由於 Arch Linux 的滾掛問題,我從沒有直接升級過系統。軟體版本以及庫自然落後了一些。 就在我準備需要用到 NFS 時,掛載網路文件系統時由於 librpc 太舊而失敗了。所以看來我得更新 librpc 了。用 yaourt -Ss
  • 作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉載,也請保留這段聲明。謝謝! 典型的UNIX系統都支持一個進程創建多個線程(thread)。在Linux進程基礎中提到,Linux以進程為單位組織操作,Linux中的線程也都基於進程。儘管實現方式有異於其它的UN
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...