【吐槽】Vanwheel 升級led借助vesc lisp編程
我真的沒想到會在這個項目上用那么長的時間,3-22入的群,到現(xiàn)在才搞得差不多。其實大部分時間都是在等快遞,還有就是卡在一些愚蠢的問題上。
為啥要搞led,其實直接買成品led控制器也是可以的,燈光的效果還多,但是聽說vesc 6系固件多了內(nèi)置編程的功能,當(dāng)時一聽就覺得,臥槽,這可太強(qiáng)了,現(xiàn)在的電調(diào)竟然不滿足于僅僅是驅(qū)動電機(jī)了,還把編程語言給嵌入進(jìn)去了,可擴(kuò)展能力肯定強(qiáng)啊,還有就是因為看了一萬lvan那個群友分享vanwheel成品里各種diy燈光效果的展示,確實是吸引了我,而且發(fā)現(xiàn)一個問題,它們雖然都驅(qū)動了led,但是led的顯示卻不夠smart,最簡單的來說就是,不能像onewheel那樣自動根據(jù)前進(jìn)方向切換板頭板尾燈光,我這么一想,嗯,這個好搞,不用費(fèi)太長時間,然后就一腳踩進(jìn)深淵里了。
我先寫了esp32網(wǎng)頁端(前端)和固件端(后端),為了方便以后蓋上腳踏板后不用再掀開升級,加了ota升級,還有網(wǎng)頁(文件)的更新接口,led使用了fastled,然后就開始愁一個問題,前后燈條顯示單色的時候,設(shè)置一次就可以運(yùn)行了,但是大部分時候,前后燈條需要循環(huán)一個動畫,動畫有自己的執(zhí)行順序,兩個燈條又各自占有時間片,要怎么在arduino這個loop中去實現(xiàn),然后找各種解答,說有什么xxxSchedule的包,還有其他什么多線程的包,結(jié)果都不好用,最后才發(fā)現(xiàn) esp32內(nèi)部竟然有一個freertos,這就好辦了,直接使用操作系統(tǒng)中的任務(wù)創(chuàng)建就好了,在loop中判斷條件,然后決定任務(wù),一個任務(wù)綁定一個燈條,任務(wù)和燈條(物理位置)一一對應(yīng),任務(wù)和責(zé)任是一對多的關(guān)系,什么意思呢?一個 任務(wù)是一個task,一個task綁定了一個燈條的全部信息,這個task只負(fù)責(zé)某一個燈條,但是task執(zhí)行的責(zé)任是可以切換的,可以執(zhí)行板頭也可以執(zhí)行板尾。這些確定好以后,就只要寫動畫效果就行了,其他都由任務(wù)調(diào)度去決定就行了。
串口這塊原以為從vesc直接接串口到esp32就算完成了,然后發(fā)現(xiàn)一個問題,有的時候串口可以通信有的時候不可以,經(jīng)過來回幾次實驗,發(fā)現(xiàn)是在輪子轉(zhuǎn)動的時候串口沒消息,不轉(zhuǎn)動的時候有消息,這是因為vanwheel運(yùn)行的是vesc的balance app,里面有一個剎車設(shè)置,當(dāng)滑板 不符合運(yùn)行的條件的時候,輪子就會產(chǎn)生一個阻力方便人上去,那么這個阻力的動力不用說肯定來自三相線,因為串口沒消息的時候vesc控制器的指示燈顯示為綠色,代表正在運(yùn)行,我肯定會想到是不是balance app自身會占用串口,因為如果是干擾的話,起碼我會收到一兩個正確的信息才對,但是問題比我想象的難得多,電機(jī)在剎車的時候,串口的消息全部都是錯誤的,我的消息一直都沒有收到截止符,導(dǎo)致我的消息一直都累積在一起沒有打印出來,偶爾還會造成esp32的崩潰。好吧,我先寫一個checksum吧,先從vesc lisp開始,好家伙,那個語言是人寫的嗎?vesc作者還極力推薦我們用lisp試試看,我把所有的例子全看了一遍才把我想做的copy出來,過程別提多痛苦了,寫完vesc這邊發(fā)送結(jié)果arduino接收那邊幾分鐘就寫完了,高下立判,lisp就是個垃圾。然后就是發(fā)現(xiàn)之前說的,當(dāng)電機(jī)轉(zhuǎn)動的時候串口全部都是錯誤的消息。
頹了一段時間,完全不知道怎么辦了,說串口通信要共地,我共了呀,接了同一個電源難道不是共嗎?怪事,藍(lán)牙接在vesc,也是串口通信就沒問題,我從電源降壓到5v接esp32,然后連接vesc和esp32的串口就不行,然后我就開始想,該不會是降壓模塊自帶濾波吧,把vesc的干擾濾掉了導(dǎo)致兩個設(shè)備不共地吧,ok,去搜了下買了個串口隔離adum1201,終于成功了
下面鏈接分享了 vesc串口發(fā)送腳本和esp32燈控固件以及為vanwheel做的pcb板
鏈接: https://pan.baidu.com/s/1aPvJzKMBEiB9uBr9SbTa0g?pwd=hhk6 提取碼: hhk6