目录

一、 MicroPython

1.1 所用开发板

1.2 Th开发环境、ESP32-python固件、官方文档

1.3 代码

1.3.0 点灯

1.3.1 定时器

1.3.2 PWM

1.3.2 PWM 控制舵机

1.3.3 TCP\UDP通信

1.3.4 LCD1602

1.3.5 数码管

1.3.6 SSD1306

1.3.7 DS18B20

1.3.8 WS2812b

1.3.9 74HC595数码管

1.3.10 MAX7219数码管

1.3.11 IIC-OLED

1.3.12 GY-30光照传感器

1.3.13 AHT10

1.3.13 DHT11

1.3.14 HCSR04

1.3.15 获取网络时间

1.3.16 获取心知天气

1.3.17 I2S播放WAV

1.4 参考资料

二 、 Pyhon

1.1 语法

1.1.0

1.1.1 语法糖

1.2 例子

1.2.0 Python爬取Bing图片

1.2.1 批量修改文件名


一、 MicroPython

1.1 所用开发板

1.2 Th开发环境、ESP32-python固件、官方文档

Thonny, Python IDE for beginners

MicroPython - Python for microcontrollers

Overview — MicroPython latest documentation

micropython: micropython官方库 https://github.com/micropython/micropython.git

GitHub - micropython/micropython-lib: Core Python libraries ported to MicroPython

1.3 代码

1.3.0 点灯

//点灯
from machine import Pin //导入GIPO库
Pin2 = Pin(2,Pin.OUT)  //设置pin2口
pin2.on()
pin2.off()
//读取电平设置电平
pin2.value()//读
pin2.value(1)//设置
//Python库的函数粗延时
from machine import Pin
import timepin2 = Pin(2,Pin.OUT)while True:pin2.on()time.sleep_ms(50)pin2.off()time.sleep_ms(50)
1.3.1 定时器

#def 定义
#period 时期
#PERIODIC 周期模式
#callback 回调
#lambda  入/闭包就是匿名函数,没有名字的函数,属于函数式编程概念from machine import Pin,Timerled = Pin(2,Pin.OUT)def led_get(Tim):print(led.value())led.on()
Tim = Timer(0)
Tim.init(period = 1000 ,mode = Timer.PERIODIC,callback = led_get)Tim = Timer(1)
Tim.init(period = 2000 ,mode = Timer.PERIODIC,callback = lambda t:led.off())
1.3.2 PWM

from machine import Pin,PWM
import time pwm = PWM(Pin(2))
pwm.freq(1000)
def pwm_set():while True:for i in range(0,1024,1):pwm.duty(i)time.sleep_ms(1)for i in range(1023,0,-1):pwm.duty(i)time.sleep_ms(1)
pwm_set()
1.3.2 PWM 控制舵机

from  machine import Pin,PWM
import timemotor = PWM(Pin(2),freq = 50 ,duty = 0)
def motor_test():while True:for i in range(0,181,1):motor.duty(int((i/90+0.5)/20*1023))time.sleep_ms(1)for i in range(180,-1,-1):motor.duty(int((i/90+0.5)/20*1023))time.sleep_ms(1)
motor_test()     
1.3.3 TCP\UDP通信

TCP


import networK                         //导入库
wlan = network.WLAN(network.STA_IF)    //创建waln对象,STA_IF从机模式 ESP32用的是2.4G
wlan.active(True)                      //是否启动WIFI
wlan.scan()                            //扫描附近WiFi
wlan.isconnected()                     //是否连接过网络
wlan.connect('HIKVISION_6CA780','yhnokn..123')     //连接WiFi
wlan.config('mac')                     //查看ESP32设备MAC
wlan.ifconfig()                        //查看路由器给设备分配的IP

from socket import *        //导入库
tcp_socket = socket(AF_INET,SOCK_STREAM)
serve_ip = "192.168.0.196"
serve_port = 8080
tcp_socket.connect((serve_ip,serve_port))    //连接本地的网络调试助手服务器,参数是元组形式
send_data = "this is a message"              //发送数据
tcp_socket.send(send_data.encode("utf-8"))
from_serve_msg = tcp_socket.recv(1024)         //接收数据
print(from_serve_msg.decode("utf-8"))

UDP


from socket import *
udp_socket = socket(AF_INET,SOCK_DGRAM)
dest_addr = ("192.168.0.196",8080)
send_data = "this is a message"
udp_socket.sendto(send_data.encode('utf-8'),dest_addr)

UDP 联网点亮LED


from machine import Pin
from socket import  *
import network
import time#网络配置
def do_connect():wlan = network.WLAN(network.STA_IF)#创建WLAN对象wlan.active(True)#激活WLANif not wlan.isconnected():print('connecting to network...')wlan.connect('HIKVISION_6CA780','yhnokn..123')while not wlan.isconnected():passprint('network config',wlan.ifconfig())#创建网络连接
def create_network_socket():udp_socket = socket(AF_INET,SOCK_DGRAM)#创建UDP套接字udp_socket.bind(("192.168.0.188",8080))#绑定端口return  udp_socket#接收数据函数
def udp_RXT_data():do_connect()udp_socket = create_network_socket()led = Pin(2,Pin.OUT)while True:#接收的数据 #发送者地址 #接收字节的长度recv_data,sendr_info = udp_socket.recvfrom(1024)#解码接收到的数据以便打印出中文recv_data_srt = recv_data.decode("utf8")print("数据内容:{}   数据地址:{}".format(recv_data_srt,sendr_info))if recv_data_srt == "开灯":led.value(1)elif recv_data_srt == "关灯":led.value(0)def main():udp_RXT_data()if __name__ == "__main__":main()

TCP 联网点亮LED


from machine import Pin
from socket import  *
import network
import time#网络配置
def do_connect():wlan = network.WLAN(network.STA_IF)#创建WLAN对象wlan.active(True)#激活WLANif not wlan.isconnected():print('connecting to network...')wlan.connect('HIKVISION_6CA780','yhnokn..123')while not wlan.isconnected():passprint('network config',wlan.ifconfig())#创建网络连接
def create_network_socket():tcp_socket = socket(AF_INET,SOCK_STREAM)#创建套接字serve_ip = "192.168.0.196"#需要连接服务器地址serve_port = 8080 #需要连接的端口tcp_socket.connect((serve_ip,serve_port))return tcp_socket#接收数据函数
def tcp_RXT_data():do_connect()tcp_socket = create_network_socket()led = Pin(2,Pin.OUT)while True:#接收的数据recv_data = (tcp_socket.recv(1024).decode("utf-8"))print("{}".format(recv_data))if recv_data == "开灯":led.value(1)elif recv_data == "关灯":led.value(0)def main():tcp_RXT_data()if __name__ == "__main__":main()

『if __name__ == "__main__"』到底啥意思❓

1.3.4 LCD1602

导入所所需要的库: lcd_api.py 和 machine_i2c_lcd.py

下载地址 GitHub - dhylands/python_lcd: Python based library for talking to character based LCDs.


from machine import SoftI2C,Pin
from machine_i2c_lcd import I2cLcd
import timelcd_addr = 0x27
I2C = SoftI2C(scl = Pin(16),sda = Pin(4),freq = 100000)
lcd = I2cLcd(I2C,lcd_addr,2,16)def main():while True:for i in range(0,10):lcd.clear()lcd.putchar("{}".format(i))time.sleep_ms(1000)if __name__ == "__main__":main()
1.3.5 数码管

(列表、字典知识点)


from machine import Pin
import  timegnd = Pin(0,Pin.OUT)a = Pin(12,Pin.OUT)
b = Pin(14,Pin.OUT)
c = Pin(27,Pin.OUT)
d = Pin(26,Pin.OUT)
e = Pin(25,Pin.OUT)
f = Pin(33,Pin.OUT)
g = Pin(32,Pin.OUT)
dp = Pin(2,Pin.OUT)      #列表(数组)
smg_pin = [a,b,c,d,e,f,g,dp]
#字典
smg_code = {0:"11111100",#键:值   (效果一样)"11111100":01:"01100000",2:"11011000",3:"11110010",4:"01100110",5:"11100110",6:"10111110",7:"11100000",8:"11111110",9:"11110110",    }
def smg_disply(num):gnd.value(0)if smg_code.get(num): #判断传入值是否在字典中i = 0;for count in smg_code.get(num):#在字典中则将键值按位赋值给countif count == "1": #字符型的比较smg_pin[i].value(1)else:smg_pin[i].value(0)i+=1;def main():smg_disply(0)time.sleep(1)while  True:passif __name__ == "__main__":main()
1.3.6 SSD1306

SSD1306官方驱动库:SSD1306

SPI方式驱动(用到的OLED为带字库的接线方式有所不同)用到CLK、MOSI、DC、CS1


from machine import  Pin,SoftSPI
from ssd1306 import  SSD1306_SPI
import time
dc = Pin(2,Pin.OUT)
res = Pin(15,Pin.OUT)
cs = Pin(4,Pin.OUT)spi = SoftSPI(baudrate=100000, polarity=1, phase=0, sck=Pin(18), mosi=Pin(23), miso=Pin(19))oled = SSD1306_SPI(128,64,spi,dc,res,cs)def main():oled.text("littleone",24,28,1)while  True:for i in range(100):oled.fill(0)oled.text("littleone:%d"%i,24,28,1)oled.invert(i)oled.rotate(i)oled.contrast(i)oled.show()time.sleep(1)if __name__ == "__main__":main()
1.3.7 DS18B20

(一线通信接口)


from machine import Pin
import onewire,ds18x20,time#创建单总线对象
ONEWIRE = onewire.OneWire(Pin(2))
#创建ds18b20对象
DS18B20 = ds18x20.DS18X20(ONEWIRE)def  dis18b20_read_Temp():roms =DS18B20.scan() #扫描ds18b20地址DS18B20.convert_temp() #开始温度转换time.sleep(1)#12位精度延迟750ms这里延时1sfor rom in roms:#把读取到的器件地址循环写入temp = DS18B20.read_temp(rom)#读取温度写入器件地址return temp #将温度值返回def main():dis18b20_read_Temp()while True:print("temp = %.2f ℃"%dis18b20_read_Temp())if __name__ == "__main__":main()

python格式化输出

1.3.8 WS2812b

2^24 = 16,777,216‬

ws2812教程


from machine import Pin
import neopixel,timepin = Pin(2,Pin.OUT)
#1:引脚  2:灯珠数  3:颜色格式(3为RGB)  4:频率 0=400K 1=800K
np = neopixel.NeoPixel(pin,n=12,bpp=3,timing=3)
def main():while True:   for i in range (0,12,1):np[i] = (24,89,i*8)np.write()time.sleep_ms(50)np.fill((0,0,0))np.write()if __name__ == "__main__":main()
1.3.9 74HC595数码管

from machine import Pin
import timeds = Pin(15,Pin.OUT) #DIO数据
RCLK = Pin(0,Pin.OUT) #存储寄存器时钟
SCLK = Pin(2,Pin.OUT) #移位寄存器时钟def ch595_write_Byte(duan,wei):#段选,位选for i in range(8):if duan & 0x80: #0x80=1000 0000ds.value(1)else:ds.value(0)SCLK.value(0)SCLK.value(1)duan <<= 1for i in range(8):if wei & 0x80: #0x80=1000 0000ds.value(1)else:ds.value(0)SCLK.value(0)SCLK.value(1)wei <<= 1RCLK.value(0)RCLK.value(1)def ch595_dispy_numberr(num,show_point):#0-9 共阴 我所用的是共阳所以把每一个数字按位取反 ~0x00为清屏不显示number = [~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f,~0x00] point = [0x1,0x1<<1,0x1<<2,0x1<<3,0x1<<4,0x1<<5,0x1<<6,0x1<<7]ch595_write_Byte(number[num],point[show_point])def main():while True:for i in range (8):ch595_dispy_numberr(i,i)time.sleep_ms(100)ch595_dispy_numberr(10,i)
if __name__ == "__main__":main()
1.3.10 MAX7219数码管

from machine import Pin,SPI
import timeclk = Pin(14,Pin.OUT)
cs = Pin(12,Pin.OUT)
dio = Pin(13,Pin.OUT)#自己写
"""
def MAX7219_Write(addr,data):cs.value(0)for i in range (8):clk.value(0)dio.value(1 if((addr<<i&0x80)) else  0)clk.value(1)for i in range (8):clk.value(0)dio.value(1 if((data<<i&0x80)) else  0)clk.value(1)cs.value(1)
"""
#SPI方式
spi = SPI(1,1000000,sck = Pin(14),mosi = Pin(13),miso = Pin(19)) #19脚用不到但也要设置
def MAX7219_Write(addr,data):cs.value(0)spi.write(chr(addr)) #写的是字符串用chr()把数值转换成一个字符spi.write(chr(data)) #写的是字符串用chr()把数值转换成一个字符cs.value(1)def MAX7219_Init():MAX7219_Write(0x0c,0x01)MAX7219_Write(0x0f,0x00)MAX7219_Write(0x09,0xff)MAX7219_Write(0x0b,0x03) #要显示的数码管个数 0x03(对应4个)MAX7219_Write(0x0a,0x01) #亮度设置0-15def MAX7219_Write_Number(num):MAX7219_Write(4,num//1000)MAX7219_Write(3,num%1000//100)MAX7219_Write(2,num%100//10)MAX7219_Write(1,num%10)def main():MAX7219_Init()while  True:for i in range(1000):MAX7219_Write_Number(i)time.sleep_ms(50)passif __name__ == "__main__":main()

点阵管

max7219.py


from machine import Pin,SPI
import Max7219,timecs = Pin(12,Pin.OUT)
spi = SPI(1,1000000,sck=Pin(14),mosi=Pin(13),miso=Pin(19))
MAX = Max7219.Matrix8x8(spi,cs,1)
MAX.init()def main():MAX.brightness(7)MAX.fill(0)while True:for i in range(9):MAX.rect(8-i,8-i,i,i,1)MAX.show()time.sleep_ms(50)MAX.fill(0)if __name__ == "__main__":main()
1.3.11 IIC-OLED

1、Soft/Hard-IIC


from machine import SoftI2C,Pin,I2C
from ssd1306 import SSD1306_I2C
import time
class chinese:chinese = [# 晓(0) 小(1) 謏(2)0x00,0xFC,0x84,0x84,0xFC,0x00,0x88,0x88,0x4F,0x58,0x24,0x54,0x84,0xE4,0x00,0x00,0x00,0x3F,0x10,0x10,0x3F,0x80,0x42,0x32,0x0E,0x02,0x02,0x3E,0x42,0x42,0x72,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00,0x08,0x04,0x03,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x00,0x08,0xA8,0xA9,0xAE,0xA8,0xA8,0x00,0xFE,0x91,0x80,0xFF,0x80,0x92,0xFE,0x00,0x00,0x00,0x7E,0x22,0x22,0x22,0x7E,0x80,0x82,0x46,0x2A,0x13,0x2A,0x46,0x82,0x80,0x00,]
i2c = SoftI2C(scl = Pin(0),sda = Pin(2),freq = 100000)#软件IIC
I2C = I2C(0,scl = Pin(22),sda =Pin(21),freq = 400000)#硬件IIC
addr = 0x3c
oled = SSD1306_I2C(128,64,I2C,addr)#显示中文
def ByteOpera(num,dat):byte = [0x01,0x02,0x04,0x8,0x10,0x20,0x40,0x80]if dat&byte[num]:return 1else:return 0
def LcdShowCh_16x16(n,x_axis,y_axis):for i in range(2):for a in range(16):for b in range(8):if(ByteOpera(b,chinese.chinese[n*32+i*16+a])):oled.pixel(x_axis+a,y_axis+i*8+b,1)else:oled.pixel(x_axis+a,y_axis+i*8+b,0)
def main():oled.fill(0)for i in range (100):oled.text("littleone:%d"%i,24,28,1)LcdShowCh_16x16(0,16,0)LcdShowCh_16x16(1,2*16,0)LcdShowCh_16x16(2,3*16,0)#         oled.text("little one",24,28)#         oled.text("{}".format(i),110,28)oled.show()time.sleep_ms(50);oled.fill(0)while True:pass
if __name__ == "__main__":main()
1.3.12 GY-30光照传感器

from machine import Pin,I2C
from ssd1306 import SSD1306_I2C
import timei2c = I2C(0,scl = Pin(22),sda = Pin(21),freq =4_00_000)
gy20_addr = int(i2c.scan()[0])
oled_addr = int(i2c.scan()[1])
oled = SSD1306_I2C(128,64,i2c,oled_addr)# print(hex(i2c.scan()[0]),hex(i2c.scan()[1]))
def Gy_30_Init():i2c.writeto(gy20_addr,b'\x01')#通电运行i2c.writeto(gy20_addr,b'\x07')#复位i2c.writeto(gy20_addr,b'\x10')#高分辨率连续读取 1lx(1流明分辨率) 120ms(测量间隔)
def Gy_30_Show():gy = i2c.readfrom(gy20_addr,2)#读两个字节16位对应GY30的分辨率gy30 = float(gy[0] << 8 | gy[1])/1.2#对读回的两个列表项进行合并time.sleep_ms(200)return gy30def main():Gy_30_Init()oled.contrast(255)while True:oled.fill(0)oled.text("gy-30 = %.2fLx"%Gy_30_Show(),0,28)oled.show()print("%.2fLx"%Gy_30_Show())if __name__ == "__main__":main()
1.3.13 AHT10

库下载链接


import time
from machine import Pin, I2Cimport ahtx0
I2C = I2C(0,scl = Pin(22),sda =Pin(21),freq = 400000)#硬件IIC
addr = int(I2C.scan()[0])
sensor = ahtx0.AHT10(I2C,addr)
# Create the sensor object using I2C
# sensor = ahtx0.AHT10(I2C)while True:print("\nTemperature: %0.2f C" % sensor.temperature)print("Humidity: %0.2f %%" % sensor.relative_humidity)time.sleep_ms(500)
1.3.13 DHT11

from machine import Pin
import dht
import time
def DHT11():dht11 = dht.DHT11(Pin(4))dht11.measure()print("temp:%.1f"% dht11.temperature())print("hum:%.1f"% dht11.humidity())print("\n")def main():while True:DHT11()time.sleep_ms(10)if __name__ == "__main__":main()
1.3.14 HCSR04
1.3.15 获取网络时间

编写ntpTime库


from machine import Pin,I2C,RTC
from ssd1306 import SSD1306_I2C
import ntptime,time,network
I2C = I2C(0,scl = Pin(22),sda =Pin(21),freq = 400000)#硬件IIC
addr = 0x3c
oled = SSD1306_I2C(128,64,I2C,addr)def do_connect():wlan = network.WLAN(network.STA_IF)wlan.active(True)if not wlan.isconnected():oled.text("connect net...",0,0,1)oled.show()wlan.connect('HIKVISION_6CA780','yhnokn..123')while not wlan.isconnected():passoled.fill(0)oled.text("connect succeed",0,0,1)oled.text("ip:%s"%wlan.ifconfig()[0],0,16,1)oled.text("MSK:%s"%wlan.ifconfig()[1],0,32,1)oled.text("GW:%s"%wlan.ifconfig()[2],0,48,1)oled.text("DNS:%s"%wlan.ifconfig()[3],0,64,1)oled.show()print('network config:', wlan.ifconfig())def syne_ntp():week = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']rtc = RTC()ntptime.NTP_DELTA = 3155644800ntptime.host = "ntp.aliyun.com"#ntptime.host = "pool.ntp.org"#time.sleep(1)oled.fill(0)try:  #异常处理模块rtc.datetime() #获取本地时间ntptime.settime() #同步本地时间oled.text("succeed",0,0,1)except : #出现异常处理oled.text("erro   ",0,0,1)times =  rtc.datetime()oled.text("%d-%.2d-%.2d"%(times[0],times[1],times[2]),0,16,1)oled.text("%.2d-%.2d-%.2d"%(times[4],times[5],times[6]),0,32,1)oled.text("%s"%(week[times[3]]),0,48,1)oled.show()#time.sleep(1)def main():do_connect()while True:syne_ntp()if __name__ == "__main__":main()

main中调用


from ntpTime import  do_connect,syne_ntp
import time
def main():do_connect()time.sleep(1)while True:syne_ntp()if __name__ == "__main__":main()

1.3.16 获取心知天气

①:注册心知天气获取秘钥

②:导入urequests库 库地址

③:心知的接口免费用户每分钟限制获取20次信息超过就或获取失败所以要加合适的延迟时间


import ntptime,time,network,urequests
import ujson
def get_weather():get = urequests.get("https://api.seniverse.com/v3/weather/now.json?key=S0uI5uodKzB8Ytdqk&location=fujianfuzhou&language=zh-Hans&unit=c")decode = ujson.loads(get.text)Cit_Name = decode["results"][0]["location"]["name"]Cit_weather = decode["results"][0]["now"]["text"]Cit_Temp = decode["results"][0]["now"]["temperature"]#最近一次更新的时间Cit_time = decode["results"][0]["last_update"]print(Cit_Name,Cit_weather,Cit_Temp,Cit_time)
def main():while True:get_weather()time.sleep(20)if __name__ == "__main__":main()

decode = ujson.loads(get.text) 的解释

Cit_Name = decode["results"][0]["location"]["name"] 的理解
decode = ujson.loads(get.text) 是将原本的Response类转换成dict字典

数据原本是这样的
{"results":[{"location":{"id":"WSSU6EXX52RE","name":"福州","country":"CN","path":"福州,福州,福建,中国","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now":{"text":"多云","code":"4","temperature":"27"},"last_update":"2023-05-31T21:52:49+08:00"}]}

转化完了就是一个字典嵌套一个列表(这个列表只有一个元素(对应[0])这个元素是一个嵌套了字典的字典)列表里面有嵌套字典的结构
["results"][0]["location"]["name"] 就是说获取字典中"results"对应的列表中的第一个元素中字典"location"中的字典"name"对应的内容

1.3.17 I2S播放WAV

使用Micropython开发ESP32开发板之通过MAX98357 I2S音频模块播放音乐_魔都飘雪的博客-CSDN博客

本地文件的读写操作只能打开下载到板子中的文件。

1.4 参考资料

Python 教程

MicroPython Esp32物联网微控制器开发

(66条消息) 1.2 ESP32-MicroPython基础操作_micropython查看内存大小_向往生的博客-CSDN博客

快速上手ESP32 — 使用MicroPython编程

让程序在ESP32上电时自动运行

二 、 Pyhon

1.1 语法

1.1.0

【Python】input()函数用法小结_python input_Darknight: :的博客-CSDN博客

Python中a和a[:]有什么区别?

剑指offer--二进制中1的个数

Python 二进制中1的个数 &0xffffffff是什么意思

C语言,\t的用法-CSDN博客

Python format 格式化函数

在 python 中,类型属于对象,对象有不同类型的区分,变量是没有类型的:
eg:
a=[1,2,3] a="Runoob"
以上代码中, [1,2,3] 是 List 类型, "Runoob" 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。


可更改(mutable)与不可更改(immutable)对象
在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变 a 的值,相当于新生成了 a。
可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
python 函数的参数传递:
不可变类型:类似 C++ 的值传递,如整数、字符串、元组。如 fun(a),传递的只是 a 的值,没有影响 a 对象本身。如果在 fun(a) 内部修改 a 的值,则是新生成一个 a 的对象。
可变类型:类似 C++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后 fun 外部的 la 也会受影响
python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象


匿名函数
Python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
lambda 只是一个表达式,函数体比 def 简单很多。
lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

1.1.1 语法糖

语法糖是编程中的某些特殊写法

①:交换量变量的值
a=1; b=2; a,b = b,a(实现交换)

②:判断变量是否落在某个范围内
if 90<=a<=100 print("优秀") 判断啊是否在90-100的范围内

③:快速构造字符串
print('-'*20) 打印出20个-

④:列表拼接
a = [1,2,3] b = [4,5,6] c= a+b

⑤:列表切片
a = [1,2,3,4,5,6,7,8,9] b = a[3:-2] = [4,5,6,7]

⑥:打包与解包
a = (1,2,3) x,y,z = a python会把a解包然后按左边变量的顺序分别赋值给x,y,z
b = (x,y,z) 把xyz的值打包给b

⑦:with语句
正常读取文件分三步
打开文件 f = open('test.txt','r') 读取文件 data = f.read( ) 关闭文件 f.colse() 最后一步关闭文件相当于‘擦屁股’的操作如果不小心忘了或者忽略可能会导致很多麻烦,pyhton用with语句很好的解决了这个问题

用with 没有用关闭文件的语句,但是他能够自动的关闭打开的文件对象自动处理异常
with oprn('test.txt','r') as f:
data = f.read()

⑧:列表推导式
eg:给列表中的元素每个加233
普通的做法:a = [1,2,3] b[] for e in a: b.append(e+233)
推导式: a = [1,2,3] b = [e+233 for e in a]

⑨:数字分割符
a = 10_0000_0000

1.2 例子

1.2.0 Python爬取Bing图片

引例:(6条消息) Python3爬取Bing每日图片,并设置为电脑桌面_python爬取bing每日一图保存_非常的硬朗的博客-CSDN博客

(6条消息) Python实用案例,Python脚本,Python实现每日更换“必应图片”为“桌面壁纸”_千寻编程的博客-CSDN博客

安装各种库的方法:(6条消息) python中import requests报错:No module named ‘requests’_Nancy-sn的博客-CSDN博客

(6条消息) Python3安装Pillow与PIL的方法_pillow资源-CSDN文库

(6条消息) 关于文件路径中/ \ // \\的使用以及绝对相对路径的问题_路径\\_csdndg的博客-CSDN博客

1.2.1 批量修改文件名

用到的是 os 模块中的 listdir 方法和 rename 方法


import ospath = "c:\\Users\\Heone\\Desktop\\python\\TEST\\"fileList = os.listdir(path)n = 0
for i in fileList:old = path+ os.sep + fileList[n]  # os.sep添加系统分隔符new = path+ os.sep + 'B' + str(n+1) +'.txt'os.rename(old,new)n +=1

ESP32+Python相关推荐

  1. ESP32 + Python打造智能温湿度花卉养植系统

    我们国家的现代农业和过去相比已经有了长足的进步,其中花卉养植监控系统也是高效农业的一个重要组成部分. 花卉养植监控系统是一种可以改变植物生长环境.为植物生长创造最佳条件.避免外界四季变化和恶劣气候对其 ...

  2. ESP32 + Python守护家庭健康、自己动手做个甲醛浓度检测设备

     甲醛(化学式HCHO或CH2O)是一种有特殊刺激气味的气体,对人的眼睛和鼻子有强烈的刺激作用.若空气中甲醛浓度过高,比如新装修的房子.新买的汽车等,可引起中毒反应,严重的可致癌.甲醛是空气中的杀手之 ...

  3. 使用 ESP32 + Python 实现在线人员入侵检测

       在工业园区中,为了园区安全,某些区域不允许人员随便进入,通过人为监控不能做到全天候监视,使用摄像头结合人体检测可以有效解决这个问题.本文则是利用HaaS Python通过摄像头采集环境图片并调用 ...

  4. (4)ESP32 Python 用OLED播放Bad Apple

    之前已经实现过了,把OLED当作一个状态显示器.但是,仅仅显示文字肯定是不够炫酷的,因为有屏幕的地方就应该有Bad Apple. 这次我们尝试一下把OLED播放一下 Bad Apple. Bad Ap ...

  5. esp32 + python 呼吸灯实现

    from machine import Pin, PWM import time led2 = PWM(Pin(2)) led2.freq(1000)while True:# 从不亮到,慢慢亮for ...

  6. micropython入门 stm32_micropython(1):芯片 STM32 开发,也可以使用micropython开发,都很方便...

    目录 前言 1,关于stm32 2,使用ESP8266 3,pyboard 3,esp32 python 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/a ...

  7. HaaS AI 应用实践“老板来了”系列之二 :WiFi摄像头人像采集

    一.前言 在物联网的诸多场景中,除了传感器是AIoT设备中的重要组成外,摄像头作为视觉输入的关键设备,在一些AI应用场景或者监控场景也是必不可少的,本文将带大家一起来给HaaS100开发板装上千里眼, ...

  8. 树莓派PICO-OLED图片和视频

    树莓派PICO-oled图片和视频 一.思路 我们在使用micropython来控制oled时,使用到了ssd1306的库,通过ssd1306引入的framebuf我们可以实现将一帧图片数据写入帧缓冲 ...

  9. 使用ESP32 + HaaS Python打造运动心率检测系统 云上实时守护运动健康

       当今社会,人们经常通过跑步等运动方式来健身.适量的运动可以提高免疫力,促进身心健康. 然而,无论是跑步,还是其他的健身运动,如果运动过量就会对身体造成损害,甚至导致休克.猝死等严重后果.    ...

  10. 【毕设参考】ESP32 + HaaS Python打造可以统计流量的自动感应门系统

       下图是本案例的四步导学. 简介    目前很多写字楼.酒店等入口都采用自动感应的方式开门.关门,当有人靠近时,门就会自动打开,远离时会自动关门:有时候也需要将自动门设置常开状态,比如需要多次进出 ...

最新文章

  1. [NLP]--NLP programming tutorial
  2. Deep-Learning-YOLOV4实践:ScaledYOLOv4模型训练自己的数据集调试问题总结
  3. Hive 整合Hbase(来自学习资料--博学谷)
  4. 沈石溪事件持续发酵 韩国将严查体育界暴力事件
  5. js 下拉底部加载|滑轮滚动到页面底部ajax加载数据的实例
  6. svn之迁移代码技巧
  7. sublime text3 Package Control 插件安装及推荐(MAC)
  8. Django中Celery简介
  9. python单词的含义-python
  10. 微信小程序毕业设计 基于微信小程序外卖点餐系统开题报告
  11. Java 实体对象转Map
  12. 经过路由无法找到计算机,共享打印机找不到对方电脑解决方法
  13. 调整swiper底部默认小点的样式
  14. JSON for modern c++ / nlohmann
  15. 全国海选第三期:广州赛区节目视频
  16. 衡量度量过程性能的几个指标
  17. keil 局部变量不能查看值,显示为not in scope
  18. 网络系统高可用是几个9?
  19. 液晶面板价格高涨,OLED电视或迎来春天
  20. TestNG监听器实现失败自动截图、重跑、自定义html结果文件功能

热门文章

  1. 求一个ngui psd导入自动拼图工具 最好能直接跑通 …………提升效率工具
  2. java alpha的值_聊聊Color中的alpha值
  3. mysql之常见函数(单行函数)09
  4. java 多线程(二、多线程详解、线程安全问题、线程状态概述)
  5. 泛微E9限定日期可选范围
  6. Apache ActiveMQ 入门实践
  7. 全民一起VBA实战篇 专题4 第七回 递归不怕检索难,万缕千层只等闲
  8. 哥挣的不是工资,是零花钱!!!
  9. 《图解ERP》读书摘要-企业部门间的运作图
  10. Android 集成Tinker踩坑记录