ESP8266的代码生成(Telegram bot中的声音传感器)
本演示讨论模型的开发。
Engee用于处理来自声音传感器的信号,然后从ESP8266微控制器的模型生成代码,通过Telegram bot进行控制。
导言
本示例的目的是在Engee中实现建模,然后生成适用于家庭自动化和物联网的简单算法的代码。 目标设备是一个内置WiFi模块的微控制器,将通过电报机器人进行控制,该机器人也由Engee模型提供。 电报机器人将从控制器接收传感器位置的声级,使用移动平均方法平均。
硬件部分
本示例中使用的目标设备是ESP8266微控制器上带有ESP12EWiFi模块的NodeMCU v1.0调试板。 器件输入的模拟信号来自LM393芯片上实现的声音传感器。 传感器从微控制器接收电力。 本例设备的连接图如下所示。
微控制器通过USB端口进行编程,程序加载到闪存中。 为了进一步操作,控制器和传感器由电源单元供电。
用户草图被编译,控制器通过Arduino IDE2.3.2进行编程。 为了使用NodeMCU v1.0(ESP-12e),Arduino IDE还具有基于ESP8266社区的ESP8266芯片的卡库。
电报机器人
电报机器人"ESP_test"([@Engeesptestbot])是作为控制控制器的用户界面创建的。(https://t.me/EngeeESPTestBot ))。 要继续使用机器人,您将需要其令牌来访问HTTP API(在创建机器人时生成)和自定义聊天ID。
正在使用的机器人中配置了两个命令: /hi -输出文本消息, /sound -输出平均声级。
创建Telegram机器人以及获取用户的聊天ID的过程是微不足道的,公开可用的,在此示例中不考虑。
应该注意的是,用于处理该示例的电报机器人的传入消息的用户代码仅使用一个指定用户的标识符。 要访问来自任何用户的命令的处理,您应该更改机器人的传入消息处理功能。
Engee模型的描述
控制器的控制算法在Engee模型中再现。 其结构如下图所示。
这里是块 MovingAverage 和 AverageDiv 为信号的10个值计算移动平均值。 与控制器外围设备的交互由块进行 C Function:
AnalogInput-从模拟输入接收声音电平信号;ToSerial-初始化串行端口并将平均声级的值传输给它;TelegramBot-初始化电报机器人,检查传入的消息;WiFiConnect-建立WiFi连接。
在街区入口处 TelegramBot 正在传输用户聊天的ID MyChatID,并在入口处 WiFiConnect -连接等待时间 ResponseTime 如果WiFi信号较弱,应增加。
要使用Telegram机器人操作控制器,您可以使用任何可用的库。 此示例使用C++FastBot库。
要连接到块中的WiFi网络 WiFiConnect 使用宏 WIFI_SSID, WIFI_PASS -WiFi网络的SSID和密码值,在用户草图中进一步确定。
以块为单位的代码的算法的详细描述 C Function 块的评论中给出。
模拟结果
在块输出处模拟移动平均算法 AnalogInput 还在从8到10的范围内生成随机输出值。 让我们通过上传和执行组装的模型来检查算法是如何工作的。
if "esp8266_tg_sound_detect" in [m.name for m in engee.get_all_models()]
m = engee.open( "esp8266_tg_sound_detect" );
else
m = engee.load( "$(@__DIR__)/esp8266_tg_sound_detect.engee" );
end
data = engee.run(m);
让我们绘制模拟信号(生成的随机值)和计算移动平均线的结果。
using Plots
plotlyjs()
plot(data["SoundFromSens"].time, data["SoundFromSens"].value,
label="Сигнал от датчика", size=(900,300), lw=2, st=:step)
plot!(data["SoundAvValue"].time, data["SoundAvValue"].value,
label="Усредненный сигнал", size=(900,300), lw=2, st=:step,
legend = :bottomright)
算法执行正确的计算,然后继续在目标设备上执行代码。
将代码上传到ESP8266
要上传到ESP8266,您必须首先从开发的模型生成代码。
engee.generate_code( "$(@__DIR__)/esp8266_tg_sound_detect.engee",
"$(@__DIR__)/esp8266_tg_sound_detect_code")
我们将连接用户草图中指定目录中生成的文件。 esp8266_tg_sound_detect.ino. 草图中还定义了宏、变量和传入消息处理函数,连接了库,并初始化了电报机器人。 下载这些文件并使用Arduino IDE将它们上传到ESP8266。
在ESP8266上执行代码
成功编译用户草图并将代码上传到控制器后,可以在Arduino IDE端口的监视器中观察到以下输出:
向Telegram机器人发送包含指定命令的消息时,您可以观察以下机器人响应::
从程序的结果可以看出,在目标设备上再现了Engee模型中指定的算法。
结论
在本演示中,我们讨论了创建一个Engee模型的过程,该模型支持从控制器的外围设备(模拟输入、串行端口和WiFi模块)进行操作。 该模型还实现了:处理来自声音传感器的模拟信号,配置和监控电报机器人。