前言

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

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

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

板子的型号是 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. Spring配置声明式事务

    Spring的事务有两种配置,一种是编程式,另一种是声明式,这里我们配置的是声明式事务 <?xml version="1.0" encoding="UTF-8&qu ...

  2. 使用 js 实现十大排序算法: 快速排序

    使用 js 实现十大排序算法: 快速排序 QuickSort 快速排序 /** * * @author xgqfrms * @license MIT * @copyright xgqfrms * @c ...

  3. UI Design & App & Free Icons

    UI Design & App & Free Icons icons8 https://icons8.com https://icons8.com/ouch Ouch可以帮助那些不进行 ...

  4. 5G & 音频,视频

    5G & 音频,视频 直播,webtrtc 音频,视频 基础知识 基本概念.播放流程.封装格式.编解码.传输协议 音视频播放流程 主要流程:采集 -> 前处理 -> 编码 -> ...

  5. nodejs package.json中的exports

    test/package.json { "name": "test", "main": "index.js", &quo ...

  6. Mila Fletcher :其实高度自律的人生并没有那么难养成

    在日常生活中,我们经常会发现,不论是学习,考证,工作,都需要坚持付出.但是很多人都没有办法在枯燥的学习过程中持续下去,这通常是因为不够自律导致的.但是尽管大家都知道自律是多么重要,却没有几个人可以真正 ...

  7. 在多线程编程中不要使用sleep()、usleep()函数

    这两个函数是非线程安全的,可能会造成程序卡死. 对于c++程序,建议使用std::this_thread::sleep_for()和std::this_thread::yield()代替. 纯c程序可 ...

  8. Kubernetes和docker----1.开始使用k8s和docker

    开始使用Kubernetes和docker docker命令 运行一个容器 docker run busybox echo "Hello world" 构建容器镜像 docker ...

  9. Vue使用&nbsp空白占位符

    当有时候需要在页面显示时显示空格时,可以使用 ,但是使用这个占位符时,无论写多少个,就只能显示一个空格.要想显示多个空格进行占位,这种方式显然是可行的,解决方法是使用转义字符. 先看代码: <t ...

  10. 第6章 for循环

    目标 掌握for循环的使用方法 理解for循环的嵌套 在第3章中,我们学习了times循环.times循环可以让一段代码重复执行指定的次数. 本章我们将学习另一种循环结构--for循环.它同样能让一段 ...