NodeMCU入门

本文最后由 森林生灵 于 2018/07/02 10:00:45 编辑

文章目录 (?) [+]

        NodeMCU 是基于 Espressif 的 ESP8266 WiFi SOC 的 eLua 固件,固件基于 Espressif NON-OS SDK,并使用基于 spiffs 的文件系统。SDK 代码库由 98.1% 的 C 语言代码和少量的 Lua 嵌入式代码组成。NodeMCU 固件是和流行的 NodeMCU dev kits 相配套的项目,现成的开源开发板使用 ESP8266-12E 芯片制作。本文记录了在 Linux 平台下对 NodeMCU 的入门学习。

    NodeMCU - Arduino-like hardware IO,Nodejs style network API,Lowest cost WI-FI.

    NodeMCU DEVKIT v1.0

    1. 构建 NodeMCU 固件

        1.1 完整版固件

    https://github.com/nodemcu/nodemcu-firmware/releases/

        1.2 自定义固件

    https://nodemcu-build.com/

    2. 烧写 NodeMCU 固件

        2.1 安装烧录工具 esptool.py

    # 安装 esptool.py
    $ sudo apt install git python3 python3-pip python3-setuptools
    $ pip3 install esptool
    # esptool.py 使用方法
    $ esptool.py -h
    usage: esptool [-h] [--chip {auto,esp8266,esp32}] [--port PORT] [--baud BAUD]
                   [--before {default_reset,no_reset}]
                   [--after {hard_reset,soft_reset,no_reset}] [--no-stub]
                   {load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash_status,write_flash_status,read_flash,verify_flash,erase_flash,erase_region,version}

        2.2 烧录固件

    参考链接:http://nodemcu.readthedocs.io/en/dev/en/flash/

        用法:

    $ esptool.py --port <serial-port-of-ESP8266> --baud <baud> write_flash --flash_mode <mode> 0x00000 <nodemcu-firmware>.bin

        说明(下同):

    • <serial-port-of-ESP8266> 为设备的串口号,在不同系统下名字有些差异,在 Linux 下为 /dev/ttyUSBn ,在 Mac OS X 下为 /dev/cu.SLAB_USBtoUART/dev/tty.SLAB_USBtoUART ,Windows 下为 COMn

    • <baud> 默认的通信波特率为 115200bps,为了加速烧写速度可以指定波特率为 921600。

    • <mode>qio 时用于 512 KiB 的模块,>= 4 MiB 的模块用 dioqio 可能也可以工作,YMMV)。

        示例:

    $ sudo esptool.py -p /dev/ttyUSB0 write_flash -fm dio 0x00000 nodemcu-master-20-modules-2017-05-05-08-29-27-float.bin

        如果不想保留固件中原有的各类 Lua 程序,可以在启动后格式化文件系统 file.format() ,也可以在烧录前刷掉整个固件

    $ sudo esptool.py --port <serial-port-of-ESP8266> erase_flash

    3. 调试工具

        3.1 串口调试 

        工具1:miniterm.py(该工具是 pyserial 的一部分,在安装 esptool 时会安装 pyserial)

    $ miniterm.py /dev/ttyUSB0 74880

        工具2:MiniCOM

        安装软件:$ sudo apt install minicom
        设置串口:$ sudo minicom -s
        打开串口:$ minicom -D <serial-port-of-ESP8266>
        基本操作:如果上面设置顺利,按开发板上的 Reset 键复位,此时窗口里就有信息打印出来了。功能设置需要先按组合键 Ctrl + A 进入设置状态,再按其它键。

    • Z 键:打开帮助菜单;

    • S 键:发送文件到目标系统中;

    • W 键:自动滚屏。当显示的内容超过一行之后,自动将后面的内容换行。这个功能在查看内核的启动信息时很有用;

    • C 键:清除屏幕的显示内容;

    • B 键:浏览 minicom 的历史显示;

    • X 键:退出 minicom ,会提示确认退出。

        操作示例:

    > print('Hello World!')
    Hello World!
    
    > file.open(init.lua', 'w')
    > file.writeline('dofile("test.lua")')
    > file.close()
    
    > node.restart()
    
    > file.open('init.lua', 'r')
    > print(file.readline())
    dofile("test.lua")
    > file.close()

        3.2 上传工具 luatool.py

        安装:

    $ sudo apt install python python-serial
    $ git clone https://github.com/4refr0nt/luatool.git
    $ cd luatool/luatool/

        用法:

    $ sudo ./luatool.py --port <serial-port-of-ESP8266> --baud <band> --src init.lua --dest init.lua --restart --verbose

        示例:

    $ sudo ./luatool.py -p /dev/ttyUSB0 -b 9600 -f init.lua -r -v

        3.3 图形化开发工具 ESPlorer

        到 https://esp8266.ru/esplorer/#download 下载最新版 ESPlorer(配置好 JDK 才能运行,可以参考 https://lanseyujie.com/post/deepin-optimization-techniques.html#7

    $ java -jar "ESPlorer/ESPlorer.jar"

    4. 初始化程序

        在 ESP8266 上创建 init.lua,它会在启动后自动执行,类似 Linux 上的 init 程序。
        当 Lua 脚本出错时可能导致系统不停地重启,可以设置拉高 GPIO 2 电平来格式化文件系统。

    if gpio.read(2) == 1 then
        file.format()
    else
        dofile('test.lua')
    end

    5. 引脚图

    NodeMCU DEVKIT v1.0 PINMAP

    6. 自动连接 Wi-Fi

    print('Setting up WIFI...')
    wifi.setmode(wifi.STATION)  -- 设置基站模式
    wifi.sta.config('SSID', 'PASSPHRASE')  -- 设置 Wi-Fi 的 SSID 和 KEY
    wifi.sta.autoconnect(1)  -- 设置自动连接
    
    tmr.alarm(1, 3000, tmr.ALARM_AUTO, function()  -- tmr.alarm([timer_id/ref], interval_ms, mode, func())
        if wifi.sta.getip() == nil then
            print('Waiting for IP ...')
        else
            print('IP is ' .. wifi.sta.getip())
            tmr.stop(1)
        end
    end)

    7. 终端用户设置

    参考链接:http://nodemcu.readthedocs.io/en/master/en/modules/enduser-setup/

        连接热点 NodeMCU 后浏览器访问 http://192.168.4.1 打开配置页面。

    wifi.setmode(wifi.STATIONAP)
    wifi.ap.config({ssid="NodeMCU", auth=wifi.OPEN})
    print("AP MAC:" .. wifi.ap.getmac())
    enduser_setup.manual(true)
    enduser_setup.start(
        function()
            print("Connected to wifi as:" .. wifi.sta.getip())
            print("STA MAC:" .. wifi.sta.getmac())
        end,
        function(err, str)
            print("Enduser Setup Error #" .. err .. ": " .. str)
        end
    );


    DOCS:http://nodemcu.readthedocs.io/en/master/en/

    未完待续...

    本文标题:NodeMCU入门
    本文链接:https://lanseyujie.com/post/nodemcu-introductory-tutorial.html
    版权声明:本文使用「署名 4.0 国际」创作共享协议,转载或使用请遵守署名协议。
    点赞 0 分享 0