
大家好! 我在一家开发设备的公司工作,该设备用于监控石油钻机,采矿场,柴油发电机组和其他无聊的东西。 但是这次我们自动化了其他东西。 因此,遇到:“ Cook 3000”-向最佳员工发放cookie的设备。
该设备是由PVC和一些零件制成的结构:
带有驱动器(用于供应货物),屏幕,硬币接收器和整个结构的大脑的螺旋-Wiren Board 6控制器。



萤幕
作为
WB6的屏幕
,我使用Nextion屏幕模块(NEXTION ENHANCED NX4832K035)。

该模块配备了AVR处理器。 具有3.5英寸TFT显示屏,分辨率为480 * 320,内部存储器为32Mb,1024字节EEPROM,8192字节RAM。
该设备可存储和显示图形,为界面元素设置动画并处理点击。 仅事件代码通过UART传输到控制器,这使得配置不同复杂性的接口变得容易。
为了将必要的设置和图形加载到屏幕模块中,提供了Nextion Editor界面的可视化编辑器。 您可以在itead官方网站上下载它。

创建新项目时,必须指定模型,屏幕位置和字符编码。 为了正确显示西里尔字母,请选择iso-8859-5。

左侧是工具栏。 在这里,您可以找到用于创建界面的最必要元素。

让我们点击按钮。 条件按钮将出现在编辑框中。 拉伸它,编辑文本和标题。 要显示文本,必须添加字体。 我们将在“工具”选项卡中使用“字体创建器”工具。 在“事件”字段中,您必须编写将在事件上播放的代码。
例如,如果您在“ Touch press event”选项卡中编写了打印“ button press \ r”按钮,那么当您单击按钮时,设备将发送到UART:按下按钮并输入换行符。

可以在该屏幕的文档中找到代码的描述和示例。 对于调试,可以使用Debug函数。 该窗口允许您在填写屏幕本身之前测试所有固件功能。

如果一切正常,则可以通过USB / UART适配器将显示器连接到计算机,然后单击“上传”按钮来填写固件。

但是,现在我们如何与WB6交朋友呢?
您可以通过同一USB \ UART适配器将屏幕连接至控制器上的USB端口之一,或直接连接至控制器板上的扩展插槽之一。
我们对引脚TX,RX,5V和GND感兴趣。

将屏幕连接到控制器后,我们将直接通过串行端口接收事件数据。
为了以某种方式响应这些事件,让我们编写一个小脚本,该脚本会将有关事件的所有数据发送到MQTT主题。 首先,在控制器的根文件夹中创建一个文件,并将其命名为serial.sh
如果一切操作正确,则在单击按钮运行脚本后,在控制器的Web界面中,您将看到一个主题,其中包含屏幕模块发送的数据。
在Wiren Board控制器上,提供了一个规则系统-wb
-rules 。 规则是通过Web界面创建的,并以类似于Javascript的简单语言编写。
在WB6 Web界面中,转到“脚本”选项卡,然后通过单击“新建...”按钮创建新脚本,将其命名为“ screen_button.js”或其他名称。 接下来,我们将编写一条规则:更改屏幕/原始主题时(正是他从屏幕上发送数据给他),将发生某些操作。 在这种情况下,当您单击屏幕时,我们将在Web界面的调试窗口中看到“按钮按下”消息:
screen_button.js defineVirtualDevice("screen", {
太好了 为了处理屏幕上的点击,我们弄清楚了。 现在让我们讨论一下如何使用WB6控制屏幕。 例如,更改按钮文本。 屏幕接受UART命令。 在屏幕文档中可以找到命令的列表和说明。
要确定命令的结束,屏幕将等待三个特殊字符(\ xff \ xff \ xff)。 为了将来简化任务:在根文件夹bash中创建一个脚本。 我们称它为text.sh:
现在,为了更改按钮文本,我们只需要使用参数调用脚本:
bash /mnt/data/root/text.sh -a b0 -b 'Some Text'
其中b0是屏幕上按钮的名称,而Some Text是所需的文本。
使用WB6规则引擎的示例:
var txt1 = "some text"; runShellCommand("bash /mnt/data/root/text.sh -a b0 -b '" + txt1+ "'");
同样,您可以更改屏幕上当前显示的页面,各种元素,变量和其他参数上的文本。 在这里,我不会画出屏幕模块的所有功能。 上面已经写的信息对于我们的项目已经足够了。
投币器
作为一个硬币接收器,我使用中文版本,该版本在速卖通的大笔交易中售价为400卢布。
通过连接,一切都很简单。 + 12v和一个脉冲输出将连接到干触点扩展模块
WBE2-DI-DR-3 。 此外,要确定硬币,我们只需要计算脉冲数即可。 为此,请在规则引擎中创建一个新脚本:
money.js var timeout_ms = 1 * 200; var timer_id = null; var timerTime = Date.now(); var timerLast = 0; var countMoney = 0; defineRule("money", { whenChanged: "wb-gpio/MOD1_IN2", then: function(newValue, devName, cellName) { if (newValue) { timerLast = Date.now() if ((timerLast - timerTime) >= 500) {
很简单的规则。 也许不是最准确的。
Bitrix24
现在,可能是最有趣的了。 让我们尝试找出如何翻译“做得好。 从架子上拿一个饼干。 我们公司使用Bitrix24系统作为CRM。 这个想法是,对于bitrix中的每个完成的任务(任务),员工都会收到一些电子积分。 这些相同的点可以用作我们设备的货币。 让我们弄清楚如何连接到Bitrix24并监视员工的成功。

我们将使用bitrix24-python-sdk作为基础。
使用以下命令在控制器上安装SDK
pip install bitrix24-python-sdk
接下来,在根文件夹中创建一个python脚本,将其命名为bitrix.py:
该脚本请求给定用户列表中的所有已完成任务,将其考虑后将其发送给mqtt中的主题。 接下来,我们只能将获得的金额与以前的值进行比较,如果新数据更多,则为工作完成的员工加分。
蓝牙功能
对于扫描BLE设备,我使用Bluez。 该程序已安装在控制器上。 为了扫描ble设备,只需在控制台中输入一些命令:
hciconfig hci0 up hcitool lescan
但是,这对我们来说还不够。 建议您查看信号电平。 为此,请安装其他hcidump实用程序:
apt-get install bluez-hcidump
并补充我们的团队:
hciconfig hci0 up hcitool lescan --duplicates | hcidump -a | grep -E 'bdaddr|RSSI'
在输出中,我们获得附近的MAC地址和RSSI蓝牙(ble)设备。

这两行可以精美地包装在bash脚本中,并将输出发送到MQTT。
第二种
方法是aioblescan脚本
它要求使用Python 3,最好是3.5。 该脚本的优点是您可以监视特定的MAC地址,而不是监视通过窗口的所有智能手表和智能手机。 为了方便使用规则引擎,脚本输出还将重定向到MQTT。

现在我们知道了如何使用屏幕模块与WB6进行交互,我们可以计数硬币,监视Bitrix中员工的成功,扫描设备及其信号电平。 剩下的就是将其收集在一个堆中并规定某种逻辑。 我不会绘制该项目的所有脚本。 一切都可以在公共领域的链接上找到。 也许你们中的一个会发现一个更有用,更聪明的应用程序。
房屋
主体由10mm泡沫PVC制成。 这种塑料以片状出售。 适度柔软。 您可以用钢锯或直尺上的普通文具刀切割。

作为紧固件,使用了儿童金属零件“构造器”和短的自攻螺钉。 在该套件中,几乎需要组装箱体的所有东西。

驱动器
螺旋桨和驱动器是在B \ U应用程序在线商店中购买的。 自动售货机零件。 由24v电源供电。 它通过扩展模块
WBE2-DO-R6C-1的继电器连接。

功能性
功能类似于普通自动售货机。 不仅要花钱买饼干。

设备启动时,屏幕上会显示带有徽标的初始屏幕,然后翻转到主屏幕,我们可以在其中购买饼干或玩游戏。
用户使用的游戏是免费的,但是您可以为动机设置一个小的价格。 规则很简单。 该播放器可以解决三个简单的问题。 如果他给出了三个正确答案,他将获得Cookie形式的奖励。 也许这就是您需要了解的所有信息。 让我们回到主菜单,然后单击“购买Cookie”。
接下来,系统会提示您选择一种付款方式。 选择付款方式“ For Money”时,屏幕上会出现一个窗口,显示价格和付款金额,当您将钱存入硬币接收器时会增加。
只要金额足以购物,设备就会自动关闭此窗口并分发商品。
但是,正如我之前说的,还提供了另一种货币-这些是Bitrix24系统中员工成功所获得的积分。 如果员工完成分配给他的任务,将获得积分。 同样,可以将积分奖励给老板,以取得特别出色的效果。




要偿还积分,员工需要选择“购买积分”项目,然后设备将尝试确定谁站在它前面。 为此,他扫描了周围的蓝牙设备,如果他看到属于该员工并已进入数据库的设备的MAC地址,并且信号电平足够强到可以假设他站在附近,则该员工帐户状态的数据将显示在屏幕上,名称和报价以积分支付Cookie。
如果系统无法确定单个熟悉的设备,则它将发出警告,并提示您从列表中选择您的名字,然后输入您的PIN码。
如果输入正确,则会在同一窗口中打开该窗口,其中包含有关用户帐户状态和产品成本的数据。 确认购买后,将从用户帐户中扣除所需的积分,然后设备发货。
仅此而已。 该项目是专门为教育目的而创建的,目的是表明Wiren Board控制器的应用仅受想象力的限制。 在
链接中可以找到所有文件和脚本。