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

embedded/2024/10/15 5:43:22/

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.ppmy.cn/embedded/127721.html

相关文章

为什么 TCP 协议有粘包问题

为什么 TCP 协议有粘包问题 为什么这么设计&#xff08;Why’s THE Design&#xff09;是一系列关于计算机领域中程序设计决策的文章&#xff0c;我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了…

【OpenGauss源码学习 —— (VecSortAgg)】

VecSortAgg 概述SortAggRunner::SortAggRunner 函数SortAggRunner::init_phase 函数SortAggRunner::init_indexForApFun 函数SortAggRunner::set_key 函数BaseAggRunner::initialize_sortstate 函数SortAggRunner::BindingFp 函数SortAggRunner::buildSortAgg 函数SortAggRunne…

k8s中的微服务

一、什么是微服务 用控制器来完成集群的工作负载&#xff0c;那么应用如何暴漏出去&#xff1f;需要通过微服务暴漏出去后才能被访问 Service是一组提供相同服务的Pod对外开放的接口。 借助Service&#xff0c;应用可以实现服务发现和负载均衡。 service默认只支持4层负载均…

MeterSphere接口自动化平台调试

1。后置脚本节目 //导入json包 import org.json.*; import com.decode.DecodeMain; String responseprev.getResponseDataAsString(); String result DecodeMain.DecodeUtil(response); log.info(“获取批次账单id result:”result); //转换为Object对象类型 JSONObject data_…

【Golang】Go 语言中的 time 包详解:全面掌握时间处理与应用

在 Go 语言中&#xff0c;time 包提供了强大的时间处理功能&#xff0c;适用于各种场景&#xff1a;获取当前时间、格式化和解析时间、计算时间间隔、设置定时器、处理超时等。在开发过程中&#xff0c;熟练掌握 time 包能够帮助我们轻松处理时间相关的操作&#xff0c;尤其是定…

蓝桥杯备赛(c/c++)

排序 9. 实现选择排序 10. 实现插入排序 11. 实现快速排序 12. 实现归并排序 13. 实现基数排序 14. 合并排序数组

dfs +剪枝sudoku———poj2676

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

C/C++ 的 #pragma pack(push, 1) 和 #pragma pack(1) 的区别详解

文章目录 1. #pragma pack(1) 介绍2. #pragma pack(push, 1) 介绍3.主要区别4.使用场景 #pragma pack(push, 1) 和 #pragma pack(1) 都是用于修改结构体、联合体或类的对齐方式的预处理指令&#xff0c;但它们之间有一些细微的差别。 1. #pragma pack(1) 介绍 功能: 将内存对…