一年前我就想做一个通过web页面来探制esp8266串的想法,主要是只要一个浏览器就在局域网可以实现串口调试,可以跨设备,跨平台使用
开发为ardino IDE+H5+css+javascript+websocket+esp8266部分 原生sdk代码移植,硬件基于esp8266 mini D1开发板
从开始动手到做到现在这个样子,差不多写写停停八花了10月,可能你看到的页面就那么几个,这些页面其实就我不断给自己挖坑,再填坑爬出来,再挖,如此循环面来。现在终于可以露个脸了。
简单说,我就是为了喝一杯牛奶,结果开了一个养牛场!!!下面分享一下我的经验
已实现主要功能:
1、web版无线串口助手,采用websocket与模块通讯,数据交互算是接近实时,功能主要参考了各流行的pc版串口助手,hex ascii 的方式都有,不过目前仅支持8位数据,应该大部分够用
2、 加了modbus crc16校验生成,方便modbusRTU设备的调试。
3、SYN6288语模块播放代码转换,也就是输入中文后可以一键转放成语音模块的播放代码,这个原本是为了测试长数据发送的可靠性的, SYN6288支持一次收200个字节,后觉得这个模块用起来不错,就将这个功能留下了
4、自我感觉web管理页面的交互性不错,因为可以用H5+javascript代码干很多事情,当然也有不足的地方,因为我没有用框架,全部用原生代码写,相当麻烦,为了一个功能要在度娘找好久,很多是没有现成的可用,只能自行拼接。
5、我一个朋友想要一pwm输出功能和一个开关控制功能,原先我就写了一路,esp8266+arduino IDE要实现pwm还是比容易实现,不过是软件模拟的。原本就这么结了,后来发现原来pwm可以干很多活,比如驱动舵机,步进电机,因为驱动步进电机要四路,后来就搞成四路了,每路2hz-10KHZ
分辨率1024,一般用还是没问题,库文件好像是按16路设计的变量数组,有兴趣的可以看一下库文件。
至于可编程,就是可以用字符串命令控制pwm输出,可以设置每路的频率,占空比,变化超始,变化终止,每隔nm,占空比变化量等,最简单的应用是可以控制四个舵机机械臂的运动动作。外加一个电机驱动板可以驱动5相四线,2相四线步进电机
一路开关功能,可以实现2ms-999h周期的pwm信号,通俗讲可以听不同频率的继电器声音,定时开,定关之类的。如我设计的命令格式为:on:50|off:50|$[3]loop,功能是开50ms ,关50ms 循环3次停止,on:3s 就是开3秒停,个人觉得asci命令还是有优势,esp8226可以到160M了,不用在乎多几个字节的时间,配合web界面在控制方面还是比较友好。
6、实现了OTA在线升级功能
7、实现了网页版内网发现硬件,airkiss配网,也就是smartconfig,
开发心得分享:
1、esp8266 确实是一个好模块,就是内存少了点,共80K,我把以上功能实现,差不多用掉40k了,别以为余下40k新富有,如果用自带的webserver库,为升级方便我没有用文件流方式(有点慢),直接将网页内容以变量的方式保存在flash中,如果一个页面15K,webserver库要是再整个变量拼装一次,在内存高占用时段,可能内存就溢出了,后果就是访问的网页会显示不全,严重时重启,所以一定要控制好一个页面的字节数,连js变量都要尽量短,代码进行压缩 。
2、esp8266稳定性还是可以的,有时会莫明的重启,大部分情况是变量设置不当,虽然编译通过了,但变量在调用过程中可出现异常,造成函数运行时变量内存溢出,写复杂代码时,最好是不要一次写了很多再编译调试,因为如果有问题,你可能要回滚很多步错误才消失。
尽量少用全局变量,全局变量非常耗内存,内存不足也是esp8266不稳定因素之一。长串的变量尽量作长度控制,设定边界,如果你的项目很大,一定要规划好变量,高手经常说少用全局变量,我现在才明白是很有道理的。
尽量不要在loop循环中定义变量,尽量只放函数封装,貌似这里定义了变量不会像函数中的局变量用完就回收。
3、自带例程是基础,不过例程功能有限,如果有需要可以进一步到函数库中了解函数功能,一级级往底层函数扒。
4、esp8266 IDE开发环境现在最新的版本是2.4.2,建议使用最新,修复了不少bug,如果你用ajax访问webserver库建的web服务,注意,新版本中默认不支持跨ajax跨域访问(2.3版本是支持的),需要自行设置http头
5、关于硬件,用的是esp8266 mini d1开发板,这个开发板体积小,有一个配套的断电器模块,可以听继电器的声音,哈哈。
带ch340,不知道是否有坛友发现没,nodemcu类的开发板,串口对于某些MCU硬件,只能发送数据,但收不到数据?卖个关子,要是有人有兴趣的我就回复答案
界面图 IPAD访问
|