一個軟體工程師的硬體修養:ESP8266 入門(普通動感單車-變智慧)

Human_nature發表於2021-03-25

前言

一直在開發軟體。今日突然心血來潮想嘗試一下硬體。

於是就買了這樣一個板子:

 

買的淘寶上大佬幫忙找的一個套裝。 除了板子之外還有一些線和其他配件:溫溼度感測器,氣壓感測器,光線感測器,小螢幕。

板子的型號是 ESP8266 CH340G 。

另外還買了一個霍爾感測器:

 

 

 

嘗試入門

 

按照網上的很多教程,拿到板子之後第一步先刷韌體。

參考  https://blog.csdn.net/qq_41736609/article/details/80980954

這裡就不多講了。

然後,隨後的事情令我猝不及防:我的板子插到我筆記本上的時候不能識別為COM串列埠,只能識別成“未知裝置”..... 這令我費解,我查了很多資料,都說是驅動沒有安裝。我隨機拿著板子插到家裡的桌上型電腦上,同樣都是win10系統,桌上型電腦立馬正確識別COM埠,驅動正常。???!!! なに???(納尼)

這令我費解,然後開始找驅動程式,找了半天終於找到了很多驅動,結果卻都不能用.... 

最後我上網搜了一下 未知裝置 的名字,什麼FT232R之類的,我忘記了,當時沒有截圖。結果真的有響應的驅動:

 

 

 哈哈哈哈,然後直接從裝置管理器裡面安裝驅動,要安裝兩邊 。我看了一個國外的網站裡面有類似的教程 :

參考 : https://www.usb-drivers.org/ft232r-usb-uart-driver.html

防止丟失,我把內容都貼出來了

 

Step 1:

Download the driver file and extract it to your hard driver where you can find it

FT232R USB UART Driver Download

Step 2:

You first need to uninstall the incorrect drivers on your computer. In Windows, go to Control Panel then to Device Manager

 a1

Now press the delete button on your computer and it will ask for confirmation.

a2

Collapse the Ports menu and now click on the USB controller at the bottom of the list.

a3

Now you need to uninstall the existing USB Serial Convertor.

a5

Disconnect the USB cable from your PC to KMX1 or KMX2

reconnect the USB cable from your PC to KMX1 or KMX2

A new yellow flagged item will appear FT232R USB UART

Right Click on FT232R USB UART

Select Update Driver Software

 

a6

Now you need to find where you extracted the drivers from the file you downloaded above and point the software to the directory.

a7

The driver software for USB Serial Converter has been installed

a8

The USB Serial Convertor is now installed. Next you have to install the port. If you are old enough to remember software modems then you will recall that it was done in the same manner.

a9

The yellow flagged item will have changed name to USB Serial Port

Right Click on USB Serial Port
Select Update Driver Software

 

a10

The driver software for the Port is in the same directory where you had the other drivers which you had just installed.

a11

The Serial Port will now install and that will be the final installation. There should be no yellow flags any more.

a12

Done!

 

上面是我引用的內容。

 

--------------------------------------------------------------------------分割線 --------------------------------------------------------------------------------

驅動搞完了,然後去nodemcu官網構建自己的韌體,開啟下面的網址

https://nodemcu-build.com/

我自己不懂,就勾選了這些

 

 

 

然後開始教程裡面的刷韌體,那個教程也有對應的軟體下載,再次感謝他的奉獻 

開發的過程中,主要用到兩個軟體:

1. 燒寫韌體工具 ESP8266Flasher

2. 燒寫程式工具 ESPlorer

 

 嗯.... 硬體裡面都叫燒寫,要麼燒錄 都是發燒友... 

 

接著 ,我連上了套件裡送的 溫溼度感測器。具體的連線方法: https://www.qutaojiao.com/233.html

貼出最重要的東西:

DHT11上標有(+或VCC)引腳的連線nodemcu的+ 3V引腳。

DHT11上標有(S或OUT)引腳的連線nodemcu的D4V引腳。

DHT11上標有(-或GND)引腳的連線nodemcu的GND引腳。

 

至此,get到新知識 :VCC連線電源正極,GND連線地線,其他基本都是資料傳輸用的。

 

 

 

然後使用剛說的第二個軟體 ESPlorer 燒寫程式:

執行結果如下:

 

 不知道為啥....   溫溼度數值都不太正常,可能時配件失靈了... 

 

 

新的想法

 做到上一步,基本已經熟悉了一點皮毛了。可以開始著手實現idea了

之前買了一個霍爾感測器,就是想把我家的普通動感單車改造成一個智慧的,可以傳輸資料的動感單車 。基本原理是

用霍爾感測器測出轉速,然後傳輸到手機或者電腦上,然後寫一個程式比如,吹氣球。 實現單車控制吹氣球的速度。哈哈哈哈哈,想想就好玩

第一步:連線

 

 

連好之後是這樣的,這個感測器有兩個燈,一個是電源指示燈,一個是 開關指示燈。 開關指示燈在霍爾感測器被啟用的時候就會亮。

不過目前我還不知道霍爾感測器怎麼被啟用......

霍爾感測器的D0介面,連線的是板子的D1或者D2 或者其他IO引腳。都可以 

第二步:操作IO介面,獲取資料

這一步卡了很久  連上之後不管怎麼都沒反應 。下面是我嘗試時的視訊,為此我還專門去旁邊的五金店買了一個磁鐵 7元錢,真貴。

算了  不能直接上傳視訊 ,弄個圖片吧

 

 

 然後,找呀找 卡在這裡很痛苦,睡覺都睡不好。 結果在小破站找到了一個大佬的視訊:

https://www.bilibili.com/video/BV1Zv411t7xk

發現他用的板子,和感測器跟我的一模一樣,這對於一個新手來說簡直是天大的福利。 能比葫蘆畫瓢的學習,最好了  哈哈哈哈 ,要是有老師更好 

如果你也在開發這個,請看他的視訊...

 

第三步:編寫程式讀取霍爾感測器資料

參考官方文件:https://nodemcu.readthedocs.io/en/release/modules/gpio

這裡有對gpio這個模組的詳細解釋,不過是英文的,一點點啃吧。 

inputPin = 4
gpio.mode(inputPin, gpio.OUTPUT)
gpio.write(0, gpio.LOW)

gpio.mode(inputPin, gpio.INPUT)
tmr.create():alarm(50, tmr.ALARM_AUTO, function()
    print(gpio.read(inputPin), tmr.time())
end)

 

哦對了,這裡有個很重要的知識點,也是卡我很久重大原因,就是關於引腳對應的GPIO編號,和index值 這個一開始我一直搞混了....  

放一個圖:

 

 

 

 

 

 

 

 

 

參考: https://www.jianshu.com/p/c3ef61c9c59b

然後,正常獲取引腳的資料了。 

 

 

 

第五步:編寫websocket 上傳資料

使用websocket是我開發javaWeb這麼多年 必選的,當然可以用其他方式互動資料,當然也是恰好官網上有websocket對這個韌體的支援:

 

 --- 2021-03-25 更新

首先,本地用spring 跑一個webSocket服務 。Java寫的 

@Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry
        .addHandler(getNodemcuHandle(), "/websocket/nodemcu")
        .addInterceptors(new ClientSocketInterceptor())
        .setAllowedOrigins("*");
    }

 

然後我電腦的IP是  192.168.3.246 ,監聽埠是 8081 ,接著

那就直接上一下 websocket程式碼吧

-- websocket
ws = websocket.createClient()
ws:on("connection", function()
    print('got ws connection')

    function hallInterupt(level, when, eventcount)
        gpio.trig(inputPin)
        -- tmr.delay(70000) -- wait 700 ms
        print('level:',level) -- print level of on pin
        print('when(us):',tmr.now() - when  ) -- print timestamp while interrupt occur
        print('eventcount:', eventcount)--eventcount

        sendData = '{"actionName":"hallData","data":"1"}'
        ws:send(sendData)
        
        gpio.trig(inputPin,"up", hallInterupt)
    end
    
    gpio.trig(inputPin,"up", hallInterupt)
    
end)
ws:on("receive", function(_, msg, opcode)
  print('got message:', msg, opcode) -- opcode 為 1 則是文字訊息, 為 2 則是二進位制訊息
end)
ws:on("close", function(_, status)
  print('connection closed', status)
  connectServer(myIp)
  --ws = nil -- 需要lua釋放回收websocket客戶端例項
  hallTmr:stop()
end)

ws:connect('ws://192.168.3.246:8081/server/websocket/nodemcu?clientId=testId')

 

 

在ws的 connection事件裡面,監聽IO的中斷,不過目前為止我還不知什麼叫中斷,畢竟才是一個剛買板子3天的小白。

雖然不懂,但是起碼知道 如果霍爾感測器有感應到資料,IO中斷就會被觸發 。 類似監聽器一樣 。注意看上面的hallInterupt方法。裡面有三個引數,參考官方解釋:

callback function when trigger occurs. The level of the specified pin at the interrupt passed as the first parameter to the callback. The timestamp of the event is passed as the second parameter. This is in microseconds and has the same base as for tmr.now(). This timestamp is grabbed at interrupt level and is more consistent than getting the time in the callback function. This timestamp is normally of the first interrupt detected, but, under overload conditions, might be a later one. The eventcount is the number of interrupts that were elided for this callback. This works best for edge triggered interrupts and enables counting of edges. However, beware of switch bounces -- you can get multiple pulses for a single switch closure. Counting works best when the edges are digitally generated. The previous callback function will be used if the function is omitted.

我懶得翻譯了。

下面三個print 方法,分別列印了這三個引數.

然後ws:send 是向伺服器傳送資料 。 websocket 程式至此完畢。

  --- 2021-03-25 更新

第六步:根據獲取的資料處理程式

 

 2021-03-24 首次編輯:

不過目前我只做到了第四步。敬請期待吧... 

2021-03-25 更新:

 已經做到第五步了

 

相關文章