NodeMCU Config

From Network Security Wiki


Micropython

Basics

  • Installing:
sudo pip install esptool
esptool.py --port /dev/ttyUSB0 erase_flash
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 ~/Desktop/esp8266-20171101-v1.9.3.bin
  • Connecting via Terminal:
sudo apt install picocom
picocom /dev/ttyUSB0 -b115200
  • Connecting via REPL(web):
import webrepl_setup

If you disabled automatic start-up on boot, you may run configured daemon on demand using:

import webrepl
webrepl.start()
  • Checking filesystem:
import os
os.listdir()
  • Create directories:
os.mkdir('dir')
  • Remove Files:
os.remove('data.txt')
  • Writing Data to files:
f = open('data.txt', 'w')
f.write('some data')
f.close()
  • Reading data:
f = open('data.txt')
f.read()
f.close()
  • Checking Machine Frequency & Overclocking:
import machine
machine.freq()                # get the current frequency of the CPU
machine.freq(160000000)       # set the CPU frequency to 160 MHz
  • Check AP Name:
import network;
ap = network.WLAN(network.AP_IF);
print(ap.config('essid'));
  • Change AP name and password:
import network;
ap = network.WLAN(network.AP_IF);
ap.active(True);
ap.config(essid='MyESP8266', authmode=network.AUTH_WPA_WPA2_PSK, password='mypassword');
print(ap.config('essid'));
  • Boot Process:
As a final step of boot procedure, main.py is executed from filesystem
This file is a hook to start up a user application each time on boot (instead of going to REPL). 
For small test applications, you may name them directly as main.py
but instead it’s recommended to keep your application(s) in separate files, and have just the following in main.py:
import my_app
my_app.main()
  • Upload data using Serial Port
sudo pip install adafruit-ampy
ampy --port /dev/ttyUSB0 put ~/Desktop/main.py
  • Check the firmware integrity:
import esp
esp.check_fw()

Deep-sleep mode

  • The deep-sleep mode will shut down the ESP8266 and all its peripherals, including the WiFi (but not including the real-time-clock, which is used to wake the chip).
  • This drastically reduces current consumption and is a good way to make devices that can run for a while on a battery.
  • To be able to use the deep-sleep feature you must connect GPIO16 to the reset pin.
  • Then the following code can be used to sleep and wake the device:
import machine

# configure RTC.ALARM0 to be able to wake the device
rtc = machine.RTC()
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)

# set RTC.ALARM0 to fire after 10 seconds (waking the device)
rtc.alarm(rtc.ALARM0, 10000)

# put the device to sleep
machine.deepsleep()
  • Note that when the chip wakes from a deep-sleep it is completely reset, including all of the memory.
  • The boot scripts will run as usual and you can put code in them to check the reset cause to perhaps do something different if the device just woke from a deep-sleep.
  • For example, to print the reset cause you can use:
if machine.reset_cause() == machine.DEEPSLEEP_RESET:
    print('woke from a deep sleep')
else:
    print('power on or hard reset')

Code Snipets

Playing with GPIO

import machine
import time
import urandom

pin = machine.Pin(2, machine.Pin.OUT)

def toggle(p):
   p.value(not p.value())

while True:
   time.sleep_ms(urandom.getrandbits(8))
   toggle(pin)


Fading an LED

import time, math
import machine

led = machine.PWM(machine.Pin(2), freq=1000)

def pulse(l, t):
    for i in range(20):
        l.duty(int(math.sin(i / 10 * math.pi) * 500 + 500))
        time.sleep_ms(t)

while True:
    pulse(led, 20)


Control a hobby servo

Hobby servo motors can be controlled using PWM. 
They require a frequency of 50Hz and a duty between about 40 and 115, with 77 being the center value. 
  • Manual Movements
servo = machine.PWM(machine.Pin(12), freq=50)
servo.duty(40)
servo.duty(115)
servo.duty(77)
  • Random movements:
servo = machine.PWM(machine.Pin(12), freq=50)
while True:
   servo.duty(urandom.getrandbits(8))
   time.sleep(1)

One Wire DS18B20 Temp Sensor

import time
import machine
import onewire, ds18x20

# the device is on GPIO12
dat = machine.Pin(12)

# create the onewire object
ds = ds18x20.DS18X20(onewire.OneWire(dat))

# scan for devices on the bus
roms = ds.scan()
print('found devices:', roms)

# loop 10 times and print all temperatures
for i in range(10):
    print('temperatures:', end=' ')
    ds.convert_temp()
    time.sleep_ms(750)
    for rom in roms:
        print(ds.read_temp(rom), end=' ')
    print()



References





{{#widget:DISQUS |id=networkm |uniqid=NodeMCU Config |url=https://aman.awiki.org/wiki/NodeMCU_Config }}