乐鑫esp8266模块micropython开发板mqtt物联网人工智能最小系统(代码片段)

卓晴 卓晴     2023-02-09     706

关键词:

简 介: ※对于购买自网络的基于ESP8266的实验模块进行了初步的测试,它其中的一些示例进行了练习。特别是对于基于ESP8266的特殊的一些外设的测试。

关键词 ESP8266MicroPython

esp8266模块
文章目录
背景介绍
调试MicroPython
基础测试
基础测试
快速参考
测试总结

 

§01 esp8266模块


一、背景介绍

从TB购买到 乐鑫esp8266模块MicroPython开发板MQTT物联网人工智能最小系统 。下面对于它进行初步测试。

1、模块套件

模块的套件包括主板以及I2COLED显示模块。

▲ 图1.1.1 购买到的模块

(1)资料下载

▲ 图1.1.2 与销售商的对话

hi,这是我用百度网盘分享的文件~复制这段内容打开「百度网盘」APP即可获取。

(2)下载目录

1.MicroPython之LED闪烁
2.MicroPython之按键
3.MicroPython之外部中断
4.MicroPython之定时器
5.MicroPython之I2C总线OLED显示屏
6. MicroPython之RTC实时时钟
7. MicroPython之ADC
8.MicroPython之PWM呼吸灯
9.MicroPython之连接无线路由器
10.MicroPython之Socket通信
12.MicroPython之开源项目8266动画animation_on_esp8266
CH340_341驱动
MicroPython视频教程
python基本方法.docx
动画演示.mp4
技术交流群.txt
开发板原理图.pdf
专用播放器解压密码123456.rar

2、接入USB

可以看到模块上面使用CH340作为USB-UART转接。接入电脑后可以看到电脑设备中出现 虚拟串口。

▲ 图1.1.3 电脑中的USB虚拟串口

3、电路板原理图

▲ 图1.1.4 核心板管脚定义

▲ 图1.1.5 按键与电源

▲ 图1.1.6 USB 与下载电路

二、调试MicroPython

基于串口REPL可以对ESP8266模块进行MicroPython编程。REPL 的操作界面使用STM32Bootloader。 对于STM32Bootloader 网络命令MPDLD进行改造。在下载MicroPython程序之前通过发送 Ctrl+C(0x3)使得程序从前执行程序中返回。

1、Help()信息

MicroPython v1.11-8-g48dcbbe60 on 2019-05-29; ESP module with ESP8266
Type "help()" for more information.
>>> help()
Welcome to MicroPython!

For online docs please visit http://docs.micropython.org/en/latest/esp8266/ .
For diagnostic information to include in bug reports execute 'import port_diag'.

Basic WiFi configuration:

import network
sta_if = network.WLAN(network.STA_IF); sta_if.active(True)
sta_if.scan()                             # Scan for available access points
sta_if.connect("<AP_name>", "<password>") # Connect to an AP
sta_if.isconnected()                      # Check for successful connection
# Change name/password of ESP8266's AP:
ap_if = network.WLAN(network.AP_IF)
ap_if.config(essid="<AP_NAME>", authmode=network.AUTH_WPA_WPA2_PSK, password="<password>")

Control commands:
  CTRL-A        -- on a blank line, enter raw REPL mode
  CTRL-B        -- on a blank line, enter normal REPL mode
  CTRL-C        -- interrupt a running program
  CTRL-D        -- on a blank line, do a soft reset of the board
  CTRL-E        -- on a blank line, enter paste mode

For further help on a specific object, type help(obj)
>>> 

2、基本程序

from machine                import Pin
import time

while True:
    print("Hello.")
    time.sleep_ms(200)

程序下载之后,在串口的REPL中重复显示:“hello

 

§02 础测试


一、基础测试

1、测试LED

(1)测试代码

from machine                import Pin
import time

led = Pin(2, Pin.OUT)

while True:
    led(1)
    time.sleep(0.5)
    led(0)
    time.sleep(0.5)

(2)结果

▲ 图2.1.1 LED闪烁

2、测试按键

(1)测试代码

电路板上有两个按钮:KEY1GPIO0KEY2GPIO14

from machine                import Pin
import time

led = Pin(2, Pin.OUT)
key = Pin(0, Pin.IN, Pin.PULL_UP)
state = 1

print("Press key to change LED state....")

while True:
    if key.value() == 0:
        time.sleep_ms(10)
        if key.value() == 0:
            state = not state
            led(state)

            while not key.value():
                pass

(2)测试结果

▲ 图2.1.2 测试按键结果

将上面的key定义修改成:

key = Pin(14, Pin.IN, Pin.PULL_UP)

可以使用另外一个按钮来切换LED的状态。

3、测试外部重点

(1)测试代码

from machine                import Pin
import time

led = Pin(2, Pin.OUT)
key = Pin(14, Pin.IN, Pin.PULL_UP)
state = 1

print("Press key to change LED state....")

def fun(key):
    global state

    time.sleep_ms(10)

    if key.value() == 0:
        state = not state
        led.value(state)

key.irq(fun, Pin.IRQ_FALLING)

(2)测试结果

按动KEY2可以切换LED状态。

▲ 图2.1.3 按动KEY2可以切换LED状态

4、测试定时器

from machine                import Pin,Timer
import time

led = Pin(2, Pin.OUT)
count = 1

print("Change LED state....")

def fun(tim):
    global count

    count += 4
    print(count)
    led.value(count%2)

tim = Timer(-1)
tim.init(period=500, mode=Timer.PERIODIC, callback=fun)

周期输出打印的字符。

5、测试OLED

▲ 图2.1.4 OLED与ESP8266连接关系

(1)测试代码

from machine                import Pin,Timer,I2C
import time

from micropython import const
import framebuf

SET_CONTRAST        = const(0x81)
SET_ENTIRE_ON       = const(0xa4)
SET_NORM_INV        = const(0xa6)
SET_DISP            = const(0xae)
SET_MEM_ADDR        = const(0x20)
SET_COL_ADDR        = const(0x21)
SET_PAGE_ADDR       = const(0x22)
SET_DISP_START_LINE = const(0x40)
SET_SEG_REMAP       = const(0xa0)
SET_MUX_RATIO       = const(0xa8)
SET_COM_OUT_DIR     = const(0xc0)
SET_DISP_OFFSET     = const(0xd3)
SET_COM_PIN_CFG     = const(0xda)
SET_DISP_CLK_DIV    = const(0xd5)
SET_PRECHARGE       = const(0xd9)
SET_VCOM_DESEL      = const(0xdb)
SET_CHARGE_PUMP     = const(0x8d)

class SSD1306(framebuf.FrameBuffer):
    def __init__(self, width, height, external_vcc):
        self.width = width
        self.height = height
        self.external_vcc = external_vcc
        self.pages = self.height // 8
        self.buffer = bytearray(self.pages * self.width)
        super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB)
        self.init_display()

    def init_display(self):
        for cmd in (
            SET_DISP | 0x00, # off
            SET_MEM_ADDR, 0x00, # horizontal
            SET_DISP_START_LINE | 0x00,
            SET_SEG_REMAP | 0x01, # column addr 127 mapped to SEG0
            SET_MUX_RATIO, self.height - 1,
            SET_COM_OUT_DIR | 0x08, # scan from COM[N] to COM0
            SET_DISP_OFFSET, 0x00,
            SET_COM_PIN_CFG, 0x02 if self.height == 32 else 0x12,
            SET_DISP_CLK_DIV, 0x80,
            SET_PRECHARGE, 0x22 if self.external_vcc else 0xf1,
            SET_VCOM_DESEL, 0x30, # 0.83*Vcc
            SET_CONTRAST, 0xff, # maximum
            SET_ENTIRE_ON, # output follows RAM contents
            SET_NORM_INV, # not inverted
            SET_CHARGE_PUMP, 0x10 if self.external_vcc else 0x14,
            SET_DISP | 0x01): # on
            self.write_cmd(cmd)
        self.fill(0)
        self.show()

    def poweroff(self):
        self.write_cmd(SET_DISP | 0x00)

    def poweron(self):
        self.write_cmd(SET_DISP | 0x01)

    def contrast(self, contrast):
        self.write_cmd(SET_CONTRAST)
        self.write_cmd(contrast)

    def invert(self, invert):
        self.write_cmd(SET_NORM_INV | (invert & 1))

    def show(self):
        x0 = 0
        x1 = self.width - 1
        if self.width == 64:
            x0 += 32
            x1 += 32
        self.write_cmd(SET_COL_ADDR)
        self.write_cmd(x0)
        self.write_cmd(x1)
        self.write_cmd(SET_PAGE_ADDR)
        self.write_cmd(0)
        self.write_cmd(self.pages - 1)
        self.write_data(self.buffer)

class SSD1306_I2C(SSD1306):
    def __init__(self, width, height, i2c, addr=0x3c, external_vcc=False):
        self.i2c = i2c
        self.addr = addr
        self.temp = bytearray(2)
        super().__init__(width, height, external_vcc)

    def write_cmd(self, cmd):
        self.temp[0] = 0x80 # Co=1, D/C#=0
        self.temp[1] = cmd
        self.i2c.writeto(self.addr, self.temp)

    def write_data(self, buf):
        self.temp[0] = self.addr << 1
        self.temp[1] = 0x40 # Co=0, D/C#=1
        self查看详情  

乐鑫esp8266学习rtos3.0笔记:分享在esp8266csdk如何通过外部写入参数,程序里面实现动态获取参数。(代码片段)

本系列博客学习由非官方人员半颗心脏潜心所力所写,不做开发板。仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。基于CSDK的ESP8266开发技术全系列笔记一、NONOSSDK无操作系... 查看详情

ESP8266 Micropython - 连接大学 Wi-fi ( WPA2 Enterprise PEAP )

】ESP8266Micropython-连接大学Wi-fi(WPA2EnterprisePEAP)【英文标题】:ESP8266Micropython-connectingtoUniversityWi-fi(WPA2EnterprisePEAP)【发布时间】:2017-05-2323:29:28【问题描述】:我有一块带有ESP8266芯片的开发板,运行Micropython固件v1.8.7。我的要求是... 查看详情

简述micropython环境如何把python源程序写进esp8266模块?

ESP8266刷入micropython之后,使用数据线连接电脑会出现一个u盘的空间。只需要将写好的.py文件拷贝到这个u盘,然后点击控制板上的rest键即可启动python程序。由于micropython系统的不稳定性,需要仔细检查编写的python程序不要出现错... 查看详情

MicroPython 和 ESP8266 http 服务器请求不完整

】MicroPython和ESP8266http服务器请求不完整【英文标题】:MicroPythonandESP8266httpserverincompleterequest【发布时间】:2021-11-2311:10:32【问题描述】:我正在尝试基于MicroPython的基本socket模块实现一个简单的http服务器,该模块提供静态html,... 查看详情

使用usb-ttl调试esp8266wifi模块

...系列模组是深圳市安信可科技有限公司开发的一系列基于乐鑫ESP8266的超低功耗的UART-WiFi模块的模组,可以方便地进行二次开发,接入云端服务,实现手机3/4G全球随时随地的控制,加速产品原型设计。 ??模块核心处理器ESP8266... 查看详情

arduino开发esp8266——安装与配置esp8266开发板

...击下一步直至安装完成。如下图所示:二、下载ESP8266开发板库:在这面填写ESP8266开发板地址:http://arduino.esp8266.com/stable/package_esp8266com_index.json,保存。三、设置开发板&# 查看详情

arduino开发esp8266——安装与配置esp8266开发板

...击下一步直至安装完成。如下图所示:二、下载ESP8266开发板库:在这面填写ESP8266开发板地址:http://arduino.esp8266.com/stable/package_esp8266com_index.json,保存。三、设置开发板&# 查看详情

arduino开发esp8266——安装与配置esp8266开发板

...击下一步直至安装完成。如下图所示:二、下载ESP8266开发板库:在这面填写ESP8266开发板地址:http://arduino.esp8266.com/stable/package_esp8266com_index.json,保存。三、设置开发板&# 查看详情

esp8266forarduino开发环境安装

适用模块:ESP8266系列适用Arduino版本:1.8.7(其它版本理论上一样,未验证)配置"开发板管理器网址": http://arduino.esp8266.com/stable/package_esp8266com_index.json 安装开发板支持,建议选择2.7.4(最新的3.0,测试发现对旧代码兼容性不好,有可能... 查看详情

esp32,esp8266之间wifi互联实验(代码片段)

...之间相互连接的实验并没有测试过。只是在ESP8266的一些MicroPython基础实验,ESP32模块的MicroPython的基 查看详情

使用vscode开发esp8266,platformio开发esp8266(代码片段)

...一致,然后上电。把板子信息选好,我是使用裸模块测试的,我的设置如下:点击上传,等待上传成功即可。使用VScode开发ESP8266安装arduino扩展并配置然后打开VScode安装arduino扩展“File”-“Preference”-“set 查看详情

基于esp8266的开源mcu方案(一)智能家居方案总体介绍

...发多个任务待续...从事物联网智能设备开发的朋友应该对乐鑫的ESP8266非常熟悉了,在MCUembeddedWi-Fi细分领域全球市场排名第二,截止2018-01-06在Github上有12,635个ESP8266的项目。基于开源方案和TY-S1开发板可以:猴!到这里算是 查看详情

基于usr-wifi模块的esp32,esp8266thonny调试器(代码片段)

...a;本文给出了基于WiFi模块USR-WiFi232设置无线调试ESP32,ESP8266MicroPython开发的环境。关键词:ESP32,ESP8266,Thonny,MicroPython,WiFi §01无线Thonny调试一、设计背景  在博文建立UDP到虚拟串口的映射软件:USR-VCOMÿ 查看详情

利用wifi模块实现micropython远程开发

  MicroPython在很多嵌入式平台上都有着应用,包括STM32F40x,ESP32,ESP8266,PicoPy等。基于MicroPython语言开发嵌入式系统,可以遵循相同的开发环境,不用操心具体MCU型号和性能,可以大大提高系统开发效... 查看详情

乐鑫esp8266学习rtos3.0笔记:分享在esp8266csdk如何通过外部写入参数,程序里面实现动态获取参数。(代码片段)

...PWM,更为深入地用PWM控制一盏LED的亮度变化。5、原生乐鑫SDK高级使用之封装Post与Get请求云端,拿到“天气预报信息”。6、了解SmartConfig与Airkiss一键配网,无需把wifi名字密码写在固件里。7、了解softAP热点配网模式原... 查看详情

arduinoideforesp8266快速入门(三)esp8266资源简介

参考技术A来看一下ESP-12模块引脚图上图是安装在各种开发板上的那个核心模块,标注的这些引脚全都是可以在Arduino中用的,具体来说是11个GPIO(其中2个被串口0占用),还有PWM、SPI、IIC、串口1、一个ADC输入,不如ArduinoUNO接口多... 查看详情

esp8266物联网开发板笔记:

  ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 查看详情