前言

一直在开发软件。今日突然心血来潮想尝试一下硬件。

于是就买了这样一个板子:

买的淘宝上大佬帮忙找的一个套装。 除了板子之外还有一些线和其他配件:温湿度传感器,气压传感器,光线传感器,小屏幕。

板子的型号是 ESP8266 CH340G 。

另外还买了一个霍尔传感器:

尝试入门

按照网上的很多教程,拿到板子之后第一步先刷固件。

参考  https://blog.csdn.net/qq_41736609/article/details/80980954

这里就不多讲了。

然后,随后的事情令我猝不及防:我的板子插到我笔记本上的时候不能识别为COM串口,只能识别成“未知设备”..... 这令我费解,我查了很多资料,都说是驱动没有安装。我随机拿着板子插到家里的台式机上,同样都是win10系统,台式机立马正确识别COM端口,驱动正常。???!!! なに???(纳尼)

这令我费解,然后开始找驱动程序,找了半天终于找到了很多驱动,结果却都不能用....

最后我上网搜了一下 未知设备 的名字,什么FT232R之类的,我忘记了,当时没有截图。结果真的有响应的驱动:

哈哈哈哈,然后直接从设备管理器里面安装驱动,要安装两边 。我看了一个国外的网站里面有类似的教程 :

参考 : https://www.usb-drivers.org/ft232r-usb-uart-driver.html

防止丢失,我把内容都贴出来了

Step 1:

Download the driver file and extract it to your hard driver where you can find it

FT232R USB UART Driver Download

Step 2:

You first need to uninstall the incorrect drivers on your computer. In Windows, go to Control Panel then to Device Manager

Now press the delete button on your computer and it will ask for confirmation.

Collapse the Ports menu and now click on the USB controller at the bottom of the list.

Now you need to uninstall the existing USB Serial Convertor.

Disconnect the USB cable from your PC to KMX1 or KMX2

reconnect the USB cable from your PC to KMX1 or KMX2

A new yellow flagged item will appear FT232R USB UART

Right Click on FT232R USB UART

Select Update Driver Software

Now you need to find where you extracted the drivers from the file you downloaded above and point the software to the directory.

The driver software for USB Serial Converter has been installed

The USB Serial Convertor is now installed. Next you have to install the port. If you are old enough to remember software modems then you will recall that it was done in the same manner.

The yellow flagged item will have changed name to USB Serial Port

Right Click on USB Serial Port
Select Update Driver Software

The driver software for the Port is in the same directory where you had the other drivers which you had just installed.

The Serial Port will now install and that will be the final installation. There should be no yellow flags any more.

Done!

上面是我引用的内容。

--------------------------------------------------------------------------分割线 --------------------------------------------------------------------------------

驱动搞完了,然后去nodemcu官网构建自己的固件,打开下面的网址

https://nodemcu-build.com/

我自己不懂,就勾选了这些

然后开始教程里面的刷固件,那个教程也有对应的软件下载,再次感谢他的奉献

开发的过程中,主要用到两个软件:

1. 烧写固件工具 ESP8266Flasher

2. 烧写程序工具 ESPlorer

嗯.... 硬件里面都叫烧写,要么烧录 都是发烧友...

接着 ,我连上了套件里送的 温湿度传感器。具体的连接方法: https://www.qutaojiao.com/233.html

贴出最重要的东西:

DHT11上标有(+或VCC)引脚的连接nodemcu的+ 3V引脚。

DHT11上标有(S或OUT)引脚的连接nodemcu的D4V引脚。

DHT11上标有(-或GND)引脚的连接nodemcu的GND引脚。

至此,get到新知识 :VCC连接电源正极,GND连接地线,其他基本都是数据传输用的。

然后使用刚说的第二个软件 ESPlorer 烧写程序:

运行结果如下:

不知道为啥....   温湿度数值都不太正常,可能时配件失灵了...

新的想法

做到上一步,基本已经熟悉了一点皮毛了。可以开始着手实现idea了

之前买了一个霍尔传感器,就是想把我家的普通动感单车改造成一个智能的,可以传输数据的动感单车 。基本原理是

用霍尔传感器测出转速,然后传输到手机或者电脑上,然后写一个程序比如,吹气球。 实现单车控制吹气球的速度。哈哈哈哈哈,想想就好玩

第一步:连线

连好之后是这样的,这个传感器有两个灯,一个是电源指示灯,一个是 开关指示灯。 开关指示灯在霍尔传感器被激活的时候就会亮。

不过目前我还不知道霍尔传感器怎么被激活......

霍尔传感器的D0接口,连接的是板子的D1或者D2 或者其他IO引脚。都可以

第二步:操作IO接口,获取数据

这一步卡了很久  连上之后不管怎么都没反应 。下面是我尝试时的视频,为此我还专门去旁边的五金店买了一个磁铁 7元钱,真贵。

算了  不能直接上传视频 ,弄个图片吧

然后,找呀找 卡在这里很痛苦,睡觉都睡不好。 结果在小破站找到了一个大佬的视频:

https://www.bilibili.com/video/BV1Zv411t7xk

发现他用的板子,和传感器跟我的一模一样,这对于一个新手来说简直是天大的福利。 能比葫芦画瓢的学习,最好了  哈哈哈哈 ,要是有老师更好

如果你也在开发这个,请看他的视频...

第三步:编写程序读取霍尔传感器数据

参考官方文档:https://nodemcu.readthedocs.io/en/release/modules/gpio

这里有对gpio这个模块的详细解释,不过是英文的,一点点啃吧。

inputPin = 4
gpio.mode(inputPin, gpio.OUTPUT)
gpio.write(0, gpio.LOW) gpio.mode(inputPin, gpio.INPUT)
tmr.create():alarm(50, tmr.ALARM_AUTO, function()
print(gpio.read(inputPin), tmr.time())
end)

哦对了,这里有个很重要的知识点,也是卡我很久重大原因,就是关于引脚对应的GPIO编号,和index值 这个一开始我一直搞混了....

放一个图:

参考: https://www.jianshu.com/p/c3ef61c9c59b

然后,正常获取引脚的数据了。

第五步:编写websocket 上传数据

使用websocket是我开发javaWeb这么多年 必选的,当然可以用其他方式交互数据,当然也是恰好官网上有websocket对这个固件的支持:

--- 2021-03-25 更新

首先,本地用spring 跑一个webSocket服务 。Java写的

@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry
.addHandler(getNodemcuHandle(), "/websocket/nodemcu")
.addInterceptors(new ClientSocketInterceptor())
.setAllowedOrigins("*");
}

然后我电脑的IP是  192.168.3.246 ,监听端口是 8081 ,接着

那就直接上一下 websocket代码吧

-- websocket
ws = websocket.createClient()
ws:on("connection", function()
print('got ws connection') function hallInterupt(level, when, eventcount)
gpio.trig(inputPin)
-- tmr.delay(70000) -- wait 700 ms
print('level:',level) -- print level of on pin
print('when(us):',tmr.now() - when ) -- print timestamp while interrupt occur
print('eventcount:', eventcount)--eventcount sendData = '{"actionName":"hallData","data":"1"}'
ws:send(sendData) gpio.trig(inputPin,"up", hallInterupt)
end gpio.trig(inputPin,"up", hallInterupt) end)
ws:on("receive", function(_, msg, opcode)
print('got message:', msg, opcode) -- opcode 为 1 则是文本消息, 为 2 则是二进制消息
end)
ws:on("close", function(_, status)
print('connection closed', status)
connectServer(myIp)
--ws = nil -- 需要lua释放回收websocket客户端实例
hallTmr:stop()
end) ws:connect('ws://192.168.3.246:8081/server/websocket/nodemcu?clientId=testId')

在ws的 connection事件里面,监听IO的中断,不过目前为止我还不知什么叫中断,毕竟才是一个刚买板子3天的小白。

虽然不懂,但是起码知道 如果霍尔传感器有感应到数据,IO中断就会被触发 。 类似监听器一样 。注意看上面的hallInterupt方法。里面有三个参数,参考官方解释:

callback function when trigger occurs. The level of the specified pin at the interrupt passed as the first parameter to the callback. The timestamp of the event is passed as the second parameter. This is in microseconds and has the same base as for tmr.now(). This timestamp is grabbed at interrupt level and is more consistent than getting the time in the callback function. This timestamp is normally of the first interrupt detected, but, under overload conditions, might be a later one. The eventcount is the number of interrupts that were elided for this callback. This works best for edge triggered interrupts and enables counting of edges. However, beware of switch bounces -- you can get multiple pulses for a single switch closure. Counting works best when the edges are digitally generated. The previous callback function will be used if the function is omitted.

我懒得翻译了。

下面三个print 方法,分别打印了这三个参数.

然后ws:send 是向服务器发送数据 。 websocket 程序至此完毕。

--- 2021-03-25 更新

第六步:根据获取的数据处理程序

2021-03-24 首次编辑:

不过目前我只做到了第四步。敬请期待吧...

2021-03-25 更新:

 已经做到第五步了

一个软件工程师的硬件修养:ESP8266 入门(普通动感单车-变智能)的更多相关文章

  1. (转)我在北京工作这几年 – 一个软件工程师的反省

    我于2007年来到北京,在北京工作这些年,先后在NEC.风行.百度几家公司担任软件工程师的职务.NEC是一家具有百年历史的传统日企,在知春路的分公司叫日电电子,我们部门主要从事机顶盒.数字电视上嵌入式 ...

  2. CEO应向软件工程师学习的7个技能

    软件工程师的哪些技能是值得CEO学习的?显然,软件工程师是逻辑的,高效的,注重细节的,有计划的,并且大多数CEO也是如此.但是,软件工程师还有一些更微妙,甚至是令人懊恼的品质,那么CEO是否可以从中学 ...

  3. 转载:CEO应向软件工程师学习的7个技能

    软件工程师的哪些技能是值得CEO学习的?显然,软件工程师是逻辑的,高效的,注重细节的,有计划的,并且大多数CEO也是如此.但是,软件工程师还有一些更微妙,甚至是令人懊恼的品质,那么CEO是否可以从中学 ...

  4. 连载《一个程序猿的生命周期》-《发展篇》 - 3.农民与软件工程师,农业与IT业

    相关文章:随笔<一个程序猿的生命周期>- 逆潮流而动的“叛逆者”        15年前,依稀记得走出大山,进城求学的场景.尽管一路有父亲的陪伴,但是内心仍然畏惧.当父亲转身离去.准备回到 ...

  5. 一个IC软件工程师的2017年终工作总结

    相比2016年的波澜起伏,2017多了一份平静和清淡.不过,平静的生活下,总有一颗飞向远方的心. 在这一年将近结束的时候,总结一下自己的工作,生活和学习.也顺便展望一下未来的2018,看看有哪些 美好 ...

  6. 《Web全栈工程师的自我修养》读书笔记(转载)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/5 ...

  7. 《web全栈工程师的自我修养》读书笔记

    有幸读了yuguo<web全栈工程师的自我修养>,颇有收获,故在此对读到的内容加以整理,方便指导,同时再回顾一遍书中的内容. 概览 整本书叙述的是作者的成长经历,通过经验的分享,给新人或者 ...

  8. 1、软件工程师要阅读的书籍 - IT软件人员书籍系列文章

    软件工程师要阅读的书籍估计是项目组内最多的.软件工程师处于项目组中最基础的人员储备阶层,与项目的关系最密切.当然,现在是大数据时代,我们无法全部看完所有相关的书籍,只能够先学习工作需要的知识,然后在项 ...

  9. [No00004D]深度思考好文:软件工程师的困境

    昨天是我一同学结婚的好日子,同学们大家聊各自的工作,有个同学突然问了我一句:我们同学中好像做软件的不多?如果再细分,好像做网络相关的更少? 回想起当时为何读计算机信息管理的专业,是因为那时听说读电脑未 ...

随机推荐

  1. 高并发之Semaphore、Exchanger、LockSupport

    本系列研究总结高并发下的几种同步锁的使用以及之间的区别,分别是:ReentrantLock.CountDownLatch.CyclicBarrier.Phaser.ReadWriteLock.Stam ...

  2. js uppercase first letter

    js uppercase first letter const str = `abc`; str.slice(0, 1).toUpperCase(); // "A" str.sli ...

  3. Sentry 高级使用教程

    Sentry 高级使用教程 Sentry versions https://github.com/getsentry/sentry-docs https://github.com/getsentry/ ...

  4. leetcode & vscode

    leetcode & vscode vscode-leetcode https://marketplace.visualstudio.com/items?itemName=LeetCode.v ...

  5. 如何关闭 iPad Pro 自动开启 wifi 和蓝牙

    如何关闭 iPad Pro 自动开启 wifi 和蓝牙 为了省电,明明关闭了,但是发现每天都会自动开启,什么鬼设计 https://support.apple.com/zh-cn/HT208086 h ...

  6. brew & apply2files bug

    brew & apply2files bug Error: Permission denied @ apply2files - /usr/local/lib/node_modules/npm/ ...

  7. Micro Frontends & microservices

    Micro Frontends & microservices https://micro-frontends.org/ https://github.com/neuland/micro-fr ...

  8. uniapp 修改meta:viewport

    onLoad(options) { this.setViewport(`width=device-width, initial-scale=1.0`); }, onUnload() { this.se ...

  9. Dart: 解析html字符串

    安装html包 import 'package:http/http.dart' as http; import 'package:html/parser.dart' show parse; impor ...

  10. Power Query 合并数据

    1 导入数据 合并数据 筛选字段 关闭并上载