如何编译nodemcu的源码

如何编译nodemcu的源码,第1张

 首先导出的LUA文件是这样的

箭头指向的位置有个Create函数。就是调用这个函数进行创建。(至于这个参数是什么,后边会讲到)

首先,先将导出的这个文件require进来,进来之后呢,调用create方法,就会返回Cocos创建的Scene了~

代码如下:

1

 前液 

local csLuaScene = require("Scene.lua").create()

然衫悔氏后create 方法返回的结果是一个table,通过csLuaScene['root']来获得创建的Scene,接着replaceScene就可以了!对于“图层”和“节点”也是类似的 *** 作!

最后通过一系列的getChildByName 和 GetChildByTag 获取子节点进行 *** 作就可以了!

啊,对了,获取动画的方式和获取Scene的方式相似 csLuaScene['animation']!

接下来,create函数的那个参数是什么东西呢?

来看这个图 ,我给Button_1添加了一个叫做btn2的Click事件

生成LUA代码之后,能够发现有如下代码段:

这段代码,首先判断callBackProvider是否为空,然后呢,将他的返回值设置为Button_1的Click回调函数。

这样就很明白了。create时候需要传入的参数callBackProvider是一个函数,他的功能是根据传入的3个参数进行判断,最终返回一个函数最为Button(或者其他node)的回调函数!

callBackProvider的三个参数,分别是,当前LUA文件的路径,所绑定的Node(可以通过name或者tag来判断是哪个node),或散最后是回调函数的名字,通过这三个参数可以很容易的知道是哪个按钮的回调事件,从而返回该按钮所需要的回调函数。

所以,在create时候应该是这样的:

local callBackProvider = function ( path,node,funcName )

if path == "Scene.lua" and node:getName()=="Button_1" and funcName =="bnt2" then

local function btnCallback( node,eventType )

--TODO

end

return btnCallback

end

end

local csLuaScene = require("Scene.lua").create(callBackProvider)

也许大家看第一篇文章时候,注意到 我这里提示了一个错误,版本不兼容。是时候更新到3.5了!如果不想更新的话,就把3.5的UI的部分替换过来吧………

模块设置

AT—Tests AT Startup

命令

AT

复制

返回

OK

复制

AT+RST—复位模块

命令

AT+RST

复制

返回

OK

复制

AT+RESTORE—恢复出厂设置

命令

AT+RESTORE

复制

响应

OK

复制

ATE—AT 命令回显

关闭回显

ATE0

复制

打开回显

ATE1

复制

AT+UART_CUR—当前UART设置,不保存到Flash

查询

AT+UART_CUR?

复制

设置

AT+UART_CUR=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>

复制

参数说明

<baudrate>: UART baud rate

<databits>: data bits

5: 5-bit data

6: 6-bit data

7: 7-bit data

8: 8-bit data

<stopbits>: stop bits

1: 1-bit stop bit

2: 1.5-bit stop bit

3: 2-bit stop bit

<parity>: parity bit

0: None

1: Odd

2: Even

<flow control>: flow control

0: flow control is not enabled

1: enable RTS

2: enable CTS

3: enable both RTS and CTS

复制

AT+UART_DEF—默认UART配置,保存进FLASH

查询

AT+UART_DEF?

复制

设置

AT+UART_DEF=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>

复制

参数与 AT+UART_CUR命令一致

AT+CWMODE—设置WIFI模式

查询命令

AT+CWMODE?

复制

相应

+CWMODE:<mode>

OK

复制

设置命令

AT+CWMODE=<mode>

复制

响应

OK

复制

参数

<mode>:

0: Null mode, WiFi RF will be disabled

1: Station mode

2: SoftAP mode

3: SoftAP+Station mode

复饥简粗凯制

AT+CWJAP—连接到AP

查询命令

AT+CWJAP?

复制

相应

+CWJAP:<ssid>,<bssid>,<channel>,<rssi>

OK

复制

参数说明

Parameters:

<ssid>: a string parameter showing the SSID of the AP.

<bssid>: the AP’s MAC address.

<channel>: channel

<rssi>: signal strength

复制

设置烂凳裤命令

AT+CWJAP=<ssid>,<pwd>[,<bssid>][,<pci_en>][,<reconn>][,<listen_interval>]

复制

响应

OK

或者

+CWJAP:

ERROR

复制

参数说明

<ssid>: the SSID of the target AP.

Escape character syntax is needed if SSID or password contains any special characters,

such as , or " or \.

<pwd>: password, MAX: 64-byte ASCII.

[<bssid>]: the target APs MAC address, used when multiple APs have the same SSID.

[<pci_en>]: enable PCI Authentication, which will disable connect OPEN and WEP AP.

[<reconn>]: enable Wi-Fi reconnection, when beacon timeout, ESP32 will reconnect

automatically.

[<listen_interval>]: the interval of listening to the AP's beacon,the range is (0,100],

<error code>: (for reference only)

1: connection timeout.

2: wrong password.

3: cannot find the target AP.

4: connection failed.

others: unknown error occurred.

复制

AT+CWQAP—与 AP 断开链接

命令

AT+CWQAP

复制

响应

OK

复制

建立连接

AT+CIPSTART—建立TCP连接,UDP传输或SSL连接

设置

AT+CIPSTART=<type>,<remote IP>,<remote port>[,<TCP keep alive>][,<local IP>]

Multiple TCP Connections (AT+CIPMUX=1):

AT+CIPSTART=<link ID>,<type>,<remote IP>,<remote port>[,<TCP keep alive>][,

<local IP>]

复制

例:连接私有云MQTT服务器

AT+CIPSTART="TCP","129.***.***.127",1883

复制

若之前没有连接过,则响应成功连接

AT+CIPSTART="TCP","129.28.***.127",1883

CONNECT

OK

复制

若之前连接过,则响应

AT+CIPSTART="TCP","129.***.***.127",1883

ALREADY CONNECTED

ERROR

复制

AT+CIPCLOSE—关闭TCP/UDP/SSL 连接

命令

AT+CIPCLOSE

复制

响应

OK

复制

AT+CIFSR读取模块IP地址

命令

AT+CIFSR

复制

响应

+CIFSR:<SoftAP IP address>

+CIFSR:<Station IP address>

OK

复制

发送数据

AT+CIPSEND—Sends Data

AT模式下发送数据

命令

AT+CIPSEND=<length>

复制

响应

OK

>

复制

跟随发送数据即可。

如果在数据传输过程中无法建立或中断连接,则系统

返回:

ERROR

复制

如果数据传输成功,系统将返回:

SEND OK

复制

透传模式下发送数据

在透传模式下,发送数据更为简单,首先进入透传模式,然后使用发送数据命令启动发送,再进行数据发送即可

发送命令

AT+CIPSEND

复制

响应

>

复制

在接收到>,后,直接发送我们的报文即可。

网络测试命令

AT+PING: Ping测试

命令

AT+PING=<IP>

复制

响应

+PING:<time>

OK

复制

例:

AT+PING="www.baidu.com"

+8

OK

复制

登录阿里云服务平台流程

1、发送“+++”让ESP8266退出透传

2、使用AT+RESTORE,恢复出厂设置

3、ATE0,关闭回显功能

4、AT+CWMODE_CUR=1 设置当前客户端为station模式

5、AT+CWJAP=<ssid>,<pwd> 连接到路由器

6、AT+CIPSTART="TCP","a1a3XzsznJI.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883 连接到阿里云,地址根据自己的情况进行修改。

7、AT+CIPMODE=1 进入透传模式

8、AT+CIPSEND 启动数据收发

9、发送报文、接收报文

10、退出连接前,先发送"+++"退出透传模式,设置AT+CIPMODE=0 进入正常AT命令模式。

复制

透传模式说明:

进入透传模式后,向服务器端发送命令和接收命令就无需带AT命令,接收到的信息也没有

例如:我们要发送连接MQTT协议报文时,在AT模式下,我们需要发以下命令(标注的位置是我们发给ESP8266模块的):

AT+CIPSEND=143

OK

'><这儿是143字节报文数据>

Recv 143 bytes

SEND OK

+IPD,4: \0\0

而进入透传模式时,我们只需要发送报文数据即可,例如我们发送C0 00心跳报文,则直接发送C0 00给ESP8266模块即可

[19:29:04.971]发→◇C0 00 □

[19:29:05.055]收←◆D0 00

[19:29:14.968]发→◇C0 00 □

[19:29:15.054]收←◆D0 00

测量太阳能电池板、UPS和其他日常使用电池的电压会花费大量时间。如果,给这些设备添加一个WiFi模块,是不是读取电压更方便了?为此,英锐恩单片机开发工程师分享了一个来自国外的基于NodeMCU开发的带WiFi模块的电池电压监控系统。

使用该系统可以连接到我们本地家庭WiFi的WiFi设备,可以从控制器读取电压,并向最终用户更新当前电池电量。为此,在本方案中使用nodemcu WiFi模块。它不仅可以用作控制器,还可以将其自身作为服务器或客户端连接到WiFi网络。电池监控电路是传统的分压器电路。我要测量12伏电池。可以修改电路以测量24伏电池,甚至更多48伏并联电池组。

Nodemcu是一个很小的设备,它的工作电压为3.3伏。由于其工作电压为3.3伏,因此其引脚只能提供和吸收3.3伏的电压。大于5伏的电压可能会烧断引脚或炸掉节点MCU。在我们的情况下,我们要测量12伏电池,nodemcu adc(模拟至数字通道)只能接受3.3伏。我们需要在这里聪明地比赛。我们要做的是将两个电阻器之间的电压拍做分压,并仅测量一个电阻器上的电压,剩余的电阻器电压将通过数学计算。典型的分压器电路和公式如下:

接下来,我们来计算一下Rtop和Rbottom的值。在这里,我们需要认真袭局衡考虑一些重要的因素。

(1)低欧姆电阻会吸收大量电流,并且电线可能会立即被加热。因此,电线可能在几秒钟内熔化。因此,对于较大的安培小时电池,请始终使用足够数量的电阻。这里选择了一个电阻Rbottom为10k欧姆。

(2)在充电过程中,电池电压可能会增加到18伏。例如,在充满阳光的情况下,150瓦的太阳能电池板在6安培时输出17伏特,输出电压甚至可以达到18伏特以上。太阳能控制器还输出电压大约等于15伏,可为电池充电。

公式计算

我将测量Rbottom两端的电压,并随机决定其值为10k欧姆。我们知道Vout可以高达3.3伏,因为nodemcu可以工作并且在其I/O引脚接受最大3.3伏。电池充电时Vin为18伏,现在我们可以计算Rtop的值。

现在,如果电池侧有18伏电压,则将在电阻器之间分配电压,在10k电阻器上将下降3.3伏,在44.54k电阻器上将剩下14.7伏。44.54 k ohm电阻在市??场上不可用,我将使用高于该额定值的电阻,可以在任何电子产品商店中找到47 k ohm电阻。如果电池没有充电,并说提供12伏电压,电阻两端的压降将是多少?

从以上讨论可以明显看出,Rbottom两端的电压现在不会超过3.3伏。我希望读者对计算有意义。现在的问题是如何通过nodemcu将3.33伏转换为12伏,或者如何从3.33伏预测电池侧的电压为12伏。这里涉及更多的数学。由于电阻值是固定的,因此我们可以计算电阻两端相对于电源的电压比,并将其用于代码中表示电源的实际电压。比率的计算方法如下:

上面给出了两种情况,当电源为18伏时和电源为12伏时,两种情况的比率均为恒定值。该比率在代码中用于预测实际的电源/电池电压。比率乘以Rbottom处的实际电压值。

方案电路图如下。我正在使用nodemcu的ADC0通道来测量电池电压。电池和nodemcu电源都必须接地,以完成电路。这是一个最常见的错误,将测量两个接地未一起接地的电压。如果未将nodemcu接地与电池接地绑在一起,则adc0引脚将变为浮动腊宏引脚,并开始读取浮动值。

在完成电路之后,是时候继续编写代码了。代码是用arduino IDE编写的。我在代码中使用了ESP8266WiFi.h库,因此请首先确保将此库安装在arduino库文件夹中。如果不存在,请从github下载并首先安装。然后输入要与您的nodemcu连接的WiFi网络的SSID和密码。最有可能的是您的家庭WiFi。因此,只需输入ssid和密码。现在,将代码上传到nodemcu中。上传之前,请确保您从arduino开发板上选择了正确的开发板。如果nodemcu没有出现在您的面板下拉菜单中,则从面板管理器导入其链接并安装其必要文件。

在浏览器中点击分配的IP后,您将看到显示电池状态和按钮的页面。随时按此按钮可获得更新的温度。

注意:Nodemcu和要查看其电压的客户端移动设备或台式机必须连接到同一WiFi。如果您的服务器节点计算机和客户端移动设备或计算机,便携式计算机等连接到不同的网络,则在点击IP后无法查看任何内容。

源代码附件:

带WiFi模块的电池电压监控系统.txt

以上就是英锐恩单片机开发工程师们分享的基于NodeMCU开发的带WiFi模块的电池电压监控系统。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12208439.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存