JS开发es8266板子,搞着玩-MAX7219模块 远程显示led字符串

JS开发es8266板子,搞着玩-MAX7219模块

板子为 esp8266 这里接了两个8x8 Led.Matrix

espjs

https://www.espruino.com/

请添加图片描述
请添加图片描述
我是看了,这个文章 发现js可以开发esp板子的就尝试了下远程点灯,挺有意思就买了很多模块慢慢尝试

代码

在这里插入图片描述

这里我把wifi模块又包了一层


var wifi = require('Wifi');function connent(WIFI_NAME, WIFI_OPTIONS, onSuccess, onError) {console.log('connenting...');wifi.on('connected', function () {wifi.getIP((err, info) => {if (err !== null) {console.log('wifi getIp err', err);onError && onError(err)throw err;}onSuccess && onSuccess(info);console.log(info.ip, 'connected');})})wifi.connect(WIFI_NAME, WIFI_OPTIONS, err => {if (err !== null) {onError && onError(err)throw err;}})
}exports.connent = connent
// index.js
var http = require('http');// wifi 名
var WIFI_NAME = "xxx";
// wifi 密码
var WIFI_OPTIONS = {password: "xxx"
}const SPI2 = new SPI();
var disp1 = require("modules/MAX7219.js");// 我这里插在看D4 D5 D3 想看怎么接的可以去看 https://www.espruino.com/MAX7219SPI2.setup({ mosi: NodeMCU.D4, sck: NodeMCU.D5 });
var disp = disp1.connect(SPI2, NodeMCU.D3, 2);var g = Graphics.createArrayBuffer(16, 8, 1); // Create graphicsg.flip = function () { disp.raw(g.buffer); }; // To send to the displayfunction drawLed(c) {g.clear()g.drawString(c, g.getWidth() - g.stringWidth(c), 1);g.flip(); // update what's on the display
}function startServer(){var PORT = 2000;http.createServer(httpServerCallBack).listen(PORT);
}function httpServerCallBack(req,res){var URL = url.parse(req.url,true)if(req.method== 'POST' && URL.pathname == '/led'){var data = ''req.on('data',(chunk)=>{data +=chunk;});req.on('end',()=>{var params = JSON.parse(data);drawLed(params.string)res.end('ok')})}
}require('utils/wifi.js').connent(WIFI_NAME,WIFI_OPTIONS,function(){startServer()
})

modules/MAX7219.js 可以用espjs module add 模块名 来添加,我是可能网速原因?去手动下了个
在这里插入图片描述
然后推送代码到设备并且重启

我是用的电脑开的热点 可以看到ip 也可以用espjs的dev模式 espjs dev

在这里插入图片描述

前端页面

页面比较简单,这里我在开发环境用了代理,不然就要用nginx了,毕竟本地玩的话开发环境开代理舒服


vite.config,jsexport default defineConfig({plugins: [vue()],server:{proxy:{'/api': {target: 'http://上面获取的ip地址:2000',changeOrigin: true,rewrite: path => path.replace(/^\/api/, '')}}}
})

// 页面 这里我把定时丢前端了 也可以做个命令让终端定时

<script setup>
import { ref, watch } from 'vue'
import axios from 'axios'defineProps({msg: String,
})const count = ref(0);
const value = ref('');const push = (data)=>{axios.post('api/led',{string: data})
}const done = ()=>{console.log(value.value)if(value.value.length>4){console.error('不能超过4个字符串')return}push(value.value)
}let timer = undefinedconst time = () => {
timer=  setInterval(()=>{count.value++;},1000)
}const timesClear = () => {clearTimeout(timer)
}watch(count,v=>{push(`${v}`)
})
</script><template><input v-model="value" /><button @click="done()">确定</button><div><button @click="time()">计时</button><button @click="timesClear()">清除计时</button></div>
</template><style scoped>
.read-the-docs {color: #888;
}
</style>

效果

在这里插入图片描述
请添加图片描述

请添加图片描述

简单的尝试了下,有很多好玩的显示图案还没尝试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/447295.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI 视频工具合集

&#x1f423;个人主页 可惜已不在 &#x1f424;这篇在这个专栏AI_可惜已不在的博客-CSDN博客 &#x1f425;有用的话就留下一个三连吧&#x1f63c; 目录 前言: 正文: ​ 前言: AI 视频&#xff0c;科技与艺术的精彩融合。它借助先进的人工智能技术&#xff0c;为影像创…

力扣刷题-算法基础

hello各位小伙伴们,为了进行算法的学习,小编特意新开一个专题来讲解一些算法题 1.移除元素. - 力扣(LeetCode) 本题大概意思是给定一个数组和一个数val删除与val相同的元素,不要改变剩余元素的顺序,最后返回剩余元素的个数。 我们在这里使用双指针,这里的双指针并不是…

【OSCP Proving Grounds 靶场系列】Slort

作者&#xff1a;Eason_LYC 悲观者预言失败&#xff0c;十言九中。 乐观者创造奇迹&#xff0c;一次即可。 一个人的价值&#xff0c;在于他所拥有的。可以不学无术&#xff0c;但不能一无所有&#xff01; 技术领域&#xff1a;WEB安全、网络攻防 关注WEB安全、网络攻防。我的…

【IPv6】IPv6 NAT66介绍

参考链接 IPv6-to-IPv6 Network Address Translation (NAT66) (ietf.org)https://datatracker.ietf.org/doc/id/draft-mrw-nat66-00.html IPv6 NAT66 NAT66&#xff0c;全称为Network Address Translation for IPv6 to IPv6&#xff0c;是一种用于IPv6网络的地址转换技术。在…

STM32-----I2C

1.基本原理&#xff1a; 上图是I2C的总线图和通讯协议图&#xff08;就是I2C是怎么实现设备之间读写数据的&#xff09; 下面主要介绍通讯协议的每一步&#xff1a; 1.发出开始信号: 一开始都为高电平为空闲状态。当SCL为高电平时&#xff0c;主机将SDA拉低即为发出开始信号&…

讲一讲Redis五大数据类型的底层实现

讲一讲Redis五大数据类型的底层实现 Redis五大数据类型的底层实现 Redis的五大数据类型分别是字符串&#xff08;String&#xff09;、列表&#xff08;List&#xff09;、哈希&#xff08;Hash&#xff09;、集合&#xff08;Set&#xff09;和有序集合&#xff08;Zset&…

中药药材推荐系统

毕业设计还在发愁选题&#xff1f;又想实用又怕复杂&#xff1f;那这篇介绍你一定感兴趣&#xff01; 今天为大家推荐一个基于Django框架开发的中药药材推荐系统&#xff0c;简洁易用&#xff0c;功能丰富&#xff0c;非常适合毕业设计。无论你是技术经验丰富的开发人员&#…

Jmeter监控服务器性能

目录 ServerAgent 安装 打开Jmeter ServerAgent 在Jmeter上监控服务器的性能比如CPU&#xff0c;内存等我们需要用到ServerAgent&#xff0c;这里可以下载我分享 ServerAgent-2.2.3.zip 链接: https://pan.baidu.com/s/1oZKsJGnrZx3iyt15DP1IYA?pwdedhs 提取码: edhs 安装…

【4.8】图搜索算法-BFS解单词接龙

一、题目 给 定 两 个 单 词 &#xff08; beginWord 和 endWord &#xff09; 和 一 个 字 典 &#xff0c; 找 到 从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则&#xff1a; 1. 每次转换只能改变一个字母。 2. 转换过程中的中间单词必须是字…

JavaScript 网页设计案例:使用 Canvas 实现趣味打气球小游戏

JavaScript 网页设计案例&#xff1a;使用 Canvas 实现趣味打气球小游戏 在网页设计中&#xff0c;交互性和趣味性是吸引用户的重要因素。借助 JavaScript 和 HTML5 的 canvas 元素&#xff0c;我们可以轻松实现各种动画效果&#xff0c;今天将带你打造一个有趣的 打气球小游戏…

【银行科技岗】相关考试知识点总结及部分考题

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、**网络与安全**二、**软件开发与设计**三、**数据库与数据管理**四、**编程与系统**五、**计算机硬件与性能**六、**大数据与人工智能**七、**系统与应用**相关…

dfs +剪枝sudoku———poj2676

目录 前言 lowbit函数 数独 suduku 问题描述 输入 输出 问题分析 子网格位置 优化搜索顺序剪枝1 优化搜索顺序剪枝2 可行性剪枝 代码 前言 lowbit函数 这是一个利用二进制位运算取出二进制数最后一位’1‘的函数 数独 数独大家肯定都玩过&#xff0c;…

<<迷雾>> 第11章 全自动加法计算机(7)--部分自动化加法 示例电路

部分实现了自动化的连续加法电路. info::操作说明 增加了译码器模块, 把从内存中取数的步骤和装载/相加的步骤综合起来, 总共五步骤 存储器中已经提前预存了 5 个数. 如果地址计数器 AC 还没有清零, 则需要先清零. 闭合 K装载 开关, 断开 K相加 开关 将开关 K 连续按 5 次, 第…

SpringMVC后台控制端校验-表单验证深度分析与实战优化

前言 在实战开发中&#xff0c;数据校验也是十分重要的环节之一&#xff0c;数据校验大体分为三部分&#xff1a; 前端校验后端校验数据库校验 本文讲解如何在后端控制端进行表单校验的工作 案例实现 在进行项目开发的时候,前端(jquery-validate),后端,数据库都要进行相关的数据…

Java多线程面试题

一.Java多线程基础 1.进程和线程的区别 程序是由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至 CPU中&#xff0c;数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 I…

【C语言】动态内存管理及相关笔试题

文章目录 一、为什么有动态内存分配二、malloc和free1.malloc函数的使用2.free函数的使用 三、calloc和realloc1.calloc函数的使用2.realloc函数的使用 四、常见动态内存分配的错误五、动态内存经典笔试题题1题2题3 六、总结C/C中程序内存区域划分 一、为什么有动态内存分配 我…

【C语言刷力扣】2206.将数组划分成相等数对

题目&#xff1a; 解题思路&#xff1a; 题目中要求元素成数对出现&#xff0c;即每个元素出现偶数次。用哈希表存放每个数出现的次数&#xff0c;再循环查看每个数的次数是否位偶数。 typedef struct {int key;int count;UT_hash_handle hh; } hashEntry;bool divideArray(int…

数据库实验3视图

10-1 创建视图计算学生课程平均分 现有一个学生数据库&#xff0c;内包含学生表&#xff08;Student&#xff09;、课程表&#xff08;Course&#xff09;和选修表&#xff08;SC&#xff09;。 在每一学年&#xff0c;学生处需要统计每位学生的学习情况&#xff0c;以便进行…

(34)FFT与信号频谱(双边谱)

文章目录 前言一、仿真代码二、仿真结果画图 前言 本文首先使用MATLAB生成一段余弦信号&#xff0c;然后对其进行FFT变换&#xff0c;给出了信号的双边幅度谱。 一、仿真代码 代码如下&#xff08;示例&#xff09;&#xff1a; %% 生成余弦波 % 指定信号的参数&#xff0c;…

layui table 自定义表头

自定义表头-查询 js/css静态文件引用 <!-- 引入 layui.css --> <link href"//unpkg.com/layui2.9.16/dist/css/layui.css" rel"stylesheet"> <!-- 引入 layui.js --> <script src"//unpkg.com/layui2.9.16/dist/layui.js"…