目前在家带孩子,翻东西找到了一块ESP8266模块,还带底板,早就听说ESP8266功能丰富有各种固件可以刷。去安信可官网(https://www.ai-thinker.com/home)看了下,叫yellow_board,不过现在好像这个版本不生产了,用着确实**,板子没有丝印,每个IO要自己去量………FUCK………好了,废话少说。找了个USB转TTL模块开搞。 本身自带了AT模式固件,还需要一个单片机去控制,那多不爽,作为一个工程狗怎能这么浪费,果断找固件ing……比较了目前做的比较好的应该是NodeMcu了,资料也比较多。 好了,第一步:刷机 构建自己的固件 随便选择几个功能模块 PS:选的功能越多固件体积越大,我第一次就是选的过多,超过了512KB,死活下载不进去,痛苦了好久,终于发现我手上的版本是比较老的模块了,SPIFlash是W25q40,只有512KB,这怎么能忍呢!!好吧,开盖,换Flash为W25Q64,8M了,开始起飞吧!! 开盖后的照片 还原他 选好之后开始,不一会邮箱就会收到发来的固件了,赞一个………… Your NodeMCU custom build finished successfully. You may now download the firmware: 里面有两个版本,一个float,一个integer,区别在于支不支持浮点数。 下载固件 下载工具一般这两个: 连接好串口,选择你的固件的位置,短接模块重新上电进入下载模式就可以开始了。波特率设置的尽量高一点,不然下载的你怀疑人生。 等一会就可以了,移除短接,重启就ok了,开始code,起飞ing………… 编写一个lua文件,下载到esp8266,run,ok 单片机工程师的第一个代码开始了:闪烁led [mw_shl_code=c,true]pin = 8
i=0
function led()
i=i+1;
if(i%2 == 0) then
print("Now is 0")
gpio.mode(pin,gpio.OUTPUT)
gpio.write(pin,gpio.LOW)
else
print("Now is 1")
gpio.mode(pin,gpio.OUTPUT)
gpio.write(pin,gpio.HIGH)
end
end
tmr.alarm(0, 1000, tmr.ALARM_AUTO, led)[/mw_shl_code] 下载进去就会一闪一闪的了,只能说这种开发方式确实简单粗暴,不用涉及基层的东西,开发时间很短。 只闪烁一个led怎么能满足?来个高级点的,OLED [mw_shl_code=c,true]cs = 8 -- GPIO15, pull-down 10k to GND
dc = 4 -- GPIO2
res = 3 -- GPIO3
spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, 8, 8)
gpio.mode(8, gpio.INPUT, gpio.PULLUP)
disp = u8g.ssd1306_128x64_hw_spi(cs, dc, res)
disp:setFont(u8g.font_6x10)
local s = 0
function draw(state)
if state == 0 then
disp:drawStr(0, 15, "drawBox")
disp:drawBox(0, 23, 10, 20)
elseif state == 1 then
disp:drawStr(0, 15, "drawCircle")
disp:drawCircle(36, 36, 10)
elseif state == 2 then
disp:drawStr(0, 15, "drawDisc")
disp:drawDisc(36, 36, 15)
elseif state == 3 then
disp:drawStr(0, 15, "drawEllipse")
disp:drawEllipse(60, 30, 20, 10, U8G_DRAW_ALL)
elseif state == 4 then
disp:drawStr(0, 15, "drawFrame")
disp:drawFrame(60, 20, 20, 30)
elseif state == 5 then
disp:drawStr(0, 15, "drawLine")
disp:drawLine(5,26, 25, 40)
elseif state == 6 then
disp:drawStr(0, 15, "drawStr")
disp:drawStr90(60, 20, "drawStr90")
else
disp:drawStr(0, 15, "drawTriangle")
disp:drawTriangle(14,20, 45,32, 9,42);
end
end
disp:begin()
tmr.alarm(0, 1000, tmr.ALARM_AUTO, function()
if s == 7 then
s = 0
else
s = s + 1
end
disp:firstPage()
while (disp:nextPage())
do
draw(s)
end
end)[/mw_shl_code] 就是这么简单,oled就亮了,感叹人生苦短……这里的oled用的spi接口的,这种 效果图: 这个固件确实强大,常见的各种器件都有库了,开发起来确实高效。 文章写的比较粗糙,有些细节可能没有表达出来,希望大家能够一块研究进步…………好像废话说多了
|