esp8266通过mqtt进行游戏控制(中)
前言
上篇文章讲到使用mqtt与NodeMCU通信:
trick:esp8266通过mqtt进行游戏控制(上)zhuanlan.zhihu.com由于开始没有按键,我使用mqtt进行通信实现控制,后面按键到了,这时我就想按键和mqtt都能控制,有按键的时候直接用按键控制,没有按键的时候wifi控制,一举两得。我就开始着手编写按键与wifi同时控制的代码。
单独测试按键与mqtt
首先先分开测试按键与mqtt控制,使用一个变量进行单一方式控制:
绘制一个两帧的恐龙,程序让这两张图片交替显示,形成恐龙行走的动画,用按键或mqtt暂停或继续。
注:恐龙图片可以从cr4fun项目中下载,player1.pbm和player2.pbm:
OpensourceBooks/chrome_offline_game_on_esp8266github.com也可以根据cr4fun的教程自己做图片,推荐自己做,动手更有意思,如何做可以看如下链接:
cr4fun:excel 2 pbm(手动制图)全过程zhuanlan.zhihu.com控制startRun变量,为true代表运动,false代表停止
controlWay
上述代码中,加入了按键防抖功能,在cr4fun原有代码中,按键没有消抖操作,导致有几率按下按钮没有反应。
这样按键没有问题了,用户可以通过改变wayNum值做单一处理。
测试好按键和mqtt都能实现控制之后,就可以把chooseCtrlWay函数中wayNum判断去掉,直接两个让两种方式都生效:
def
绘图
绘图这一块参考了cr4fun的代码,在esp8266上实现12864屏幕驱动,强烈建议先看cr4fun的实现:
OpensourceBooks/animation_on_esp8266github.com三方库:12864屏幕驱动由ssd1306提供,绘图库由gfx.py提供(代码见文章底部附录),建议要看懂代码!
1306驱动一块可以从下面的博客了解协议:
https://blog.csdn.net/notMine/article/details/79317782blog.csdn.net这里主要讲如何做连接。这里使用的oled 12864遵循I2C协议,注意,要四个引脚的!!!
接线的话VCC接3.3V,GND接地,SCL接D4,SDA接D3。如果不熟悉引脚,去我上一篇文章看引脚图。
D3对应GPIO0,D4对应GPIO2,所以代码中有i2c = I2C(scl=Pin(2), sda=Pin(0), freq=100000)。
这里将图片的一些参数提取出来,好做图片更换:
picStartIndex
通过如下代码进行图片设置图片及显示:
oled
最终主函数为:
while
最终代码:
from
附录
屏幕驱动:ssd1306.py:
# MicroPython SSD1306 OLED driver, I2C and SPI interfaces
绘图库gfx.py:
# Port of Adafruit GFX Arduino library to MicroPython.
下一篇文章,将会把代码融合到恐龙项目中,敬请期待!!!