第一章我们建立了对ESP8266芯片的了解,并且将micropython的固件成功烧写到了esp8266芯片中。python和micropython的语法几乎完全一样,可能差别只在一些高级用法。接下来我们利用esp8266这块芯片驱动一些外设,从中研究如何使用这块芯片。
1)esp8266芯片 2)esp8266开发板 3)环境配置 4)开发小项目 5)补充知识
开发项目:1)hello world 2)利用esp8266驱动oled屏 3)利用esp8266驱动oled屏-------oled屏幕显示图片
4)利用esp8266驱动红外避障模块
1)hello world
这个项目主要是用来学习如何把程序烧录进esp8266的,我们这里使用的是micropython file uploader这款工具的。下载地址为:https://www.wbudowane.pl/download/。当然烧写程序的工具不止一种,目前比较简单的方式有putty,或者直接在vscode中使用mpfshell插件都可以实现上位机和MCU的交互。
micropython file uploader界面串口连接成功后,在“Type something....”处输入print('hello python!')就会显示hello python! 此时就表示上位机通过micropython file uploader已经可以和MCU进行正常交互了。我们的第一个小项目就完成了。
2)利用esp8266驱动oled屏-------oled屏幕显示文字
我们选用的oled屏是0.96寸OLED,其分辨率为128*64。这块oled屏幕引出了4个引脚,分别是GND,VCC(3.3v),SCL对应板子的D1(也就是芯片GPIO5),SDA对应板子的D2(也就是芯片GPIO4)。具体的接线图如下图所示。
oled屏ssd1306与esp8266接线图选用这块oled屏的最大原因是它和esp8266的通信协议是I2C协议。I2C 总线是一种串行数据总线,只有二根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,两条线可以挂多个设备。 I2C设备(绝大多数)里有个固化的地址,只有在两条线上传输的值等于I2C设备的固化地址时,其才会作出响应。通常我们为了方便把I2C设备分为主设备和从设备,基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。
实现oled屏幕显示文字需要用到两个模块,其中一个是machine模块,这个模块是micropython来控制MCU的,另一个模块是micrpython中已经写好的驱动这块oled屏幕的模块---ssd1306模块。
完成oled初始化后,就可以对这块oled屏进行操作。由于这块屏幕是128x64分辨率的,你也可以把它看成是128行64列的一块屏幕,方便估计文字在oled的位置。这里要说明的是micropython的ssd1306模块并没有自带写入汉字的驱动,所以text函数只支持输入英文,这里一个英文字体大小大约占8列,所以估计好每一行文字之间的距离,已达到文字在oled屏幕上最完美的显示。
屏幕清空 在屏幕上显示文字3)利用esp8266驱动oled屏-------oled屏幕显示图片
首先显示oled支持显示.pbm格式的图案,也就是说需要把图案转换成pbm格式。在线转换.pbm的网站地址为:
https://onlineconvertfree.com/zh/convert-format/bmp-to-pbm/
与在oled屏显示字母不同,显示位图需要使用framebuf模块----帧缓冲区操作该函数库提供一个像素缓冲区,此缓冲区可使用像素、线、矩形、文本甚至其他帧缓冲区来绘制。我们这里显示位图就需要把建立一个帧缓冲区,然后把位图放在帧缓冲区中,通过I2C协议显示在oled屏上。
把图片转化为.pbm格式,然后send到MCU中,开始编写程序。首先如同上一个项目所讲的步骤,先初始化通信协议和oled屏。然后读写.pbm图片。这里用with函数来读取图片,当然也可以直接用open函数来直接读取图片。
读取图片将读到的图片放入像素缓冲区,然后在oled屏幕进行图片绘制。最后在调用oled.show()在oled屏幕显示图片。
图片读入像素缓冲区4)利用esp8266驱动红外避障模块
红外避障模块的原理是当模块检测到前方障碍物信号时,电路板上绿色指示灯点亮电平,同时OUT端口持续输出低电平信号,该模块检测距离2~30cm,检测角度35°,检测距离可以通过电位器进行调节,顺时针调电位器,检测距离增加;逆时针调电位器,检测距离减少。模块总共只有3个Pin,为:
红外避障模块1 VCC 外接3.3V-5V电压(可以直接与5v单片机和3.3v单片机相连)
2 GND 外接GND
3 OUT 小板数字量输出接口(0和1)
驱动方式主要判断OUT引脚输出电平为高电平还是低电平。于此来判断前方是否已经有障碍物。利用micropython file uploader可以看到当前方有障碍物时,MCU会输入‘Find target!’,当无障碍物时会显示’safe!’。
判断前方有无障碍物函数
网友评论