Nodemcu上使用Mongoose OS:用户自定义配置

通过Web界面对程序运行的参数进行自定义、修改,实现自己需要的用户配置。

程序不提供用户数据定义、修改的界面,那么它是不完整的。


以RPC服务为桥梁,HTML页面做前端。

官方的wifi设置例子,使用Microsoft.XMLHTTP对象,最原始的ajax操作来完成后端和界面的数据交换。

资源足够,还是使用jquery方便。


MO的webserver非常强,不拿来使用太可惜。

使用C编程,资源消耗确实小,但是编写确实麻烦,没有mjs来得方便。但是最终还是得用C来写。


1、界面使用bootstrap?

它的尺寸大,有人建议使用CDN源,这个办法不错。但若是连接到NodeMCU的AP模式时,手机无法上网,不能获得远端文件。

而且它依赖jquery,尺寸也很大。

当然Node的存储空间是足够的。

这儿推荐: minicss和zeptojs,合起来尺寸是64K。qeptojs和jquery语法类似,迁移没有困难。


2、自定义Schema

除了OS预定义的wifi, i2c等配置外,可定义自己的数据结构。

  - ["r0", "o", {title: "relay_0"}]
  - ["r0.idx", "i", 0, {title: "relay no."}]
  - ["r0.enable", "b", false, {title: "enabled"}]
  - ["r0.title", "s", "relay 0", {title: "description"}]
  - ["r0.priority", "i", 1, {title: "priority level"}]

仿照示例来写,最后生成一个结构体:

struct sys_config_r0 {
  int idx;
  int enable;
  char *title;
  int priority;
};


可以在gen下的sysconfig.h中看到,可以使用get_cfg()来做访问。

结构体不能复用,多个类似的数据,只能duplicate了。


3、通过rpc写配置

关键一点,ajax提交的数据,要和定义的数据类型一致,否则提交不成功。但reponse是null,可在uart界面可以看到错误提示。

// save to server
		$("#save").click(function (ev) {
			ev.preventDefault();
			var priority = 0;
			
			var d = {
				config: {
					r0: {
						idx: parseInt($("#idx").val()),
						enable: $("#en").is(":checked"),
						title: $("#title").val(),
						priority: 0
					}
				}
			};
			$.ajax({
				type: "POST",
				url: "/rpc/Config.Set",
				contentType: "text/plain; charset=utf-8",
				data: JSON.stringify(d),
				success: function (xhr, type) {
					$.ajax({
						type: "POST",
						url: "/rpc/Config.Save",
						contentType: "text/plain; charset=utf-8",
						data: JSON.stringify({ reboot: false }),
					});
				},
				error: function (xhr, type) {
					alert("写失败");
				}
			})

		});


使用$.ajax,而不是$.post,因为这里需要指定contentType,MOS只认识text格式,其他的编码不识别(也可以试一下)。

向MOS提交的数据,不是原生表单数据、JSON数据, 必须是JSON转变为字符串(见上代码)。

需要注意JSON数据的层次路径,config是根路径。


4、前端可以使用HTML5

可以毫无顾忌的扔掉IE浏览器,使用最新的HTML 5标准来写页面。

可以使用websocket通信。

如果要在android手机中写一个app,使用websocket会是很好的选择。



可以看到,内存损耗很小,比lua固件节省太多。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

容沁风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值