分类 前端 下的文章

function setAddressDefault(id){

$.ajax({
    url: "{:url('user_address/setAddressDefault')}",
    type: 'POST',
    data: {id:id},
    dataType: 'json',
    success: function (res) {
        //console.log(res);
        layer.msg(res.msg,{time:1500},function() {
            if (res.code === 1) {
                window.location.reload();
            }
        });
    }
})
return false;

}

Nuxt.js
hapi
AVM.JS
egg.js
koa.js
express
sails

Vue+Vant+Typescript
React+Antd+Typescripts
Node+Koa2+mongoose+Typescript

Pandora
前台访问
http://127.0.0.1:10003
后台登录
http://127.0.0.1:10003/dr-admin
登录账号: doramart/123456 doracms/123456

mqtt

snowboy

https://www.w3cschool.cn/electronmanual/
NW.js Electron electron-egg 桌面应用
http://c.biancheng.net/view/7790.html

物联网
git clone -b release/v4.4 --recursive https://github.com/espressif/esp-idf.git
idf.py set-target esp32c3 不输入参数的话,会列出所有可用型号
idf.py menuconfig 配置菜单
idf.py build 编译
idf.py -p COM5 monitor 打开串口5监视器
idf.py -p COM5 flash 向串口5烧录固件
idf.py clean 会清除之前的编译

idf.py -p COM3 flash

https://wiki.luatos.com/chips/esp32c3/index.html
https://dl.espressif.com/dl/package_esp32_jindex.json
2.8266使 用这个http://arduino.esp8266.com/stable/package_ esp8266com. jindex.json

如何用Arduino IDE开发 合宙LuatOS ESP32C3开发板?
https://blog.csdn.net/a1415539404a/article/details/124534428

rtthread
arduino

GPIO(英语:General-purpose input/output),通用型之输入输出的简称
串口驱动(CH343)
ADC即 模拟数字转换器
脉宽调制(PWM,Pulse Width Modulation)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中

烧录:JTAG和SWD(ST-Link)
STLINK和jlink、DAPLink
DAPLINK功能介绍
https://www.eemaker.com/daplink-function.html

BDC 有刷直流电机 换向器/定子
N -》 S
M 电机符号
方向、转速pwm
130 双电机模块 1-6V +5V

无刷直流电机
N -》 S 永磁厂

双极性步进电机
单极性步进电机 中间

永磁式 硬磁材料
反应式 软磁材料
混合式 (nema17/42步进电机 )

a4988

电位器 万能表
1.2电压vref
1.5安培
电阻0.1欧姆

RX 接收(receive)
TX 接收(transmit)

波特率9600 每秒传输9600位
1字节 1/9600秒

ascii

功率=电压*电流

存储介质

IRremote – 红外遥控

https://www.esp32.com/viewforum.php?f=24&sid=1718410287339529bfb026bd5500096a

ESP32C3-CORE开发板文档: http://wiki.luatos.com/chips/esp32c3/board.html
https://doc.openluat.com/wiki/21?wiki_page_id=2776
LCD扩展板资料: https://doc.openluat.com/wiki/21?wiki_page_id=2672

温湿度传感器AHT10资料: https://doc openluat com/wiki/21?wiki_ page_ id=2677
。三轴加速 度陀螺仪MPU6050资料: https://doc. openluat. com/wiki/21?wiki_ page_ id=2706

idf.py set-target esp32c3
https://github.com/espressif/arduino-esp32#readme

板载资源:三轴加速计、三轴陀螺仪、环境光传感器、温湿度传感器、IO 扩展器、可编程 RGB LED 灯、麦克风、音频功放,SD 卡接口等;
拓展接口:包括 5V/3.3V 电源接口、程序下载接口、UART 接口、I2C 接口、SPI 接口、USB 接口、TWAI(兼容 CAN 2.0)接口(可用在工业领域)。

嵌入式软件方向:重点关注C语言、单片机、微机原理、EDA技术,接触一下ARM芯片,体验体验linux操作系统。

郭天祥的教程啊,达尔闻
Linux内核与驱动
除了应用之外,linux相关的还有内核和驱动。这个时候你可能会需要一个linux开发板。通常大家都会给自己的开发板移植linux系统,在这个过程中你就会接触到uboot的移植,linux内核的移植,根文件系统的制作这必须的三大步骤。建议你买本书或视频好好看看。
系统移植好后,就可以进入到驱动的学习。从早期驱动模型到平台设备驱动到设备树的使用,都要过一遍,一般大家都会从字符设备驱动学起,比如先自己写一个led灯的驱动,试试驱动的安装和卸载这些流程,然后写一写复杂点的串口的驱动,移植一些复杂点的,比如网卡驱动、LCD屏的驱动等等。在这个过程中,你会越来越多的接触到内核,跟它有着频繁且亲密的互动。这时候免不了学点内核调试技术了,比如中断子系统、内核休眠与内核定时器,异步通知,内核同步机制等。这里的知识相当复杂,不建议初学者入戏太深。驱动和内核的知识太过庞大,不能急于求成,适合在漫长的岁月里慢慢体会它的巧妙之处。
如果你觉得这些还不够,希望再拓展一些知识面。
那Arm玩过了,可以看看FPGA,像Zynq这种热门的芯片,有机会一定要玩一玩。现在物联网比较热门,你可以让你的设备上个网。了解下行业流行的MQTT通信协议,比如用微信小程序远程控制你的设备,感受物联网的世界。

✔熟练C/C++,熟练使用cortex-M3、A9芯片,具有stm32裸机开发经验,以及SPI、232、485、IIC、CAN总线等协议的使用经验。
✔熟练掌握arm+Linux嵌入式应用开发,驱动开发,TCP/IP网络编程等。
✔熟悉FPGA软件,有zynq开发经验。
✔熟悉Python/golang后端,物联网云端开发;

问题提问
https://docs.espressif.com/projects/espressif-esp-faq/zh_CN/latest/index.html

技术类(偏工程实践):偏软件:Java开发工程师、大数据开发工程师、Python开发工程师、C/C++开发工程师、AI开发工程师(偏人工智能工程化以及MLOps)、WEB开发工程师、移动端开发(安卓、IOS)、运维工程师(有系统运维、业务运维、DBA、桌面运维等方向)偏硬件:嵌入式/单片机开发工程师、射频工程师、技术类(偏理论研究):算法工程师、算法研究员(具体有NLP、语音、视觉等方向)。半技术类:测试工程师(需要懂一些技术)、售前工程师(需要懂一些技术)、解决方案架构师(需要懂一些技术)。非技术类:产品经理(有物联网、AI、电商、B端、C端等方向)、UI设计师(有视觉设计、交互设计等方向)、人力资源(HRBP)、运营与推广(有用户运营、产品运营、游戏运营、新媒体运营、网络推广等)、项目经理。

在线 UUID 生成器
https://www.uuidgenerator.net/

可道云.资源管理器
KodExplorer

画PCB用cadence更好一点吧
简单的板子可以用立创EDA

串口(先发送低位)
什么时候接收数据(起始信号作用)
波特率 每秒发送的位数
累积误差,每次通讯最多1个字节

IIC(先发送高位)

都是高电平 
SCL  
SDA  

主机(发送器)
起始信号
1
1->0
终止信息
1
0->1
接收器(应答 低电平)
一帧9位

SPI 串行外设接口

前端图片压缩上传


<form action="" method="post" enctype="multipart/form-data" id="frm">
    <div class="l-a">
        <div class="l-b" style="text-align: center;display: flex;align-items: center;justify-content: center;">
            <input type="file" name="image" accept="image/*" capture="camera" id="photos"/>
            <img src="" id="ylimg" height="100%" />
        </div>
    </div>
</form>

console.log(curRq);

禁止右键
document.oncontextmenu=function(e){return false;}

window.history.back(-1);

$('.rts5 li').click(function(){

var index=$(this).index();  //获取当前a标签的个数
$(this).addClass('on').siblings().removeClass('on');
$('.tab').hide().eq(index).show();

})

$(function() {
window.__Object_toJSONString = Object.prototype.toJSONString;
delete Object.prototype.toJSONString;
});

1、window.location.href(设置或获取整个 URL 为字符串)

var test = window.location.href;
alert(test);
返回:http://i.cnblogs.com/EditPosts.aspx?opt=1

2、window.location.protocol(设置或获取 URL 的协议部分)

var test = window.location.protocol;
alert(test);
返回:http:

3、window.location.host(设置或获取 URL 的主机部分)

var test = window.location.host;
alert(test);
返回:i.cnblogs.com

4、window.location.port(设置或获取与 URL 关联的端口号码)

var test = window.location.port;
alert(test);
返回:空字符(如果采用默认的80端口(update:即使添加了:80),那么返回值并不是默认的80而是空字符)

5、window.location.pathname(设置或获取与 URL 的路径部分(就是文件地址))
var test = window.location.pathname;
alert(test);
返回:/EditPosts.aspx

6、window.location.search(设置或获取 href 属性中跟在问号后面的部分)

var test = window.location.search;
alert(test);
返回:?opt=1

PS:获得查询(参数)部分,除了给动态语言赋值以外,我们同样可以给静态页面,并使用javascript来获得相信应的参数值。

7、window.location.hash(设置或获取 href 属性中在井号“#”后面的分段)

var test = window.location.hash;
alert(test);
返回:空字符(因为url中没有)

8、js获取url中的参数值

JSON.parse(res.data.trim())

http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000
https://es6.ruanyifeng.com/#docs/intro

//tab 切换
$(".tab span").click(function(){

$(this).addClass("on").siblings().removeClass("on");
$(".info form").eq($(this).index()).show().siblings().hide();

})

//跳转
window.location.href="jb51.jsp?backurl="+window.location.href;

$.ajax({

type: "POST",
dataType: "json",
url: 'zhongbao.php?act=xuanding',
data: {'jie_id':jie_id,'zb_id':zb_id},
success: function (data) {
    alert(data.message);
    if(data.status==200){
        window.location.href="jb51.jsp?backurl="+window.location.href; 
    }
},
error: function(data) {
    alert("error:"+data.responseText);
}

});

//获取url参数
function GetRequest() {

var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
    var str = url.substr(1);
    strs = str.split("&");
    for(var i = 0; i < strs.length; i ++) {
        theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);
    }
}
return theRequest;

}

function setQueStr(url, ref, value) //设置参数值
{

var str = "";
if (url.indexOf('?') != -1)
    str = url.substr(url.indexOf('?') + 1);
else
    return url + "?" + ref + "=" + value;
var returnurl = "";
var setparam = "";
var arr;
var modify = "0";

if (str.indexOf('&') != -1) {
    arr = str.split('&');

    for (i in arr) {
        if (arr[i].split('=')[0] == ref) {
            setparam = value;
            modify = "1";
        }
        else {
            setparam = arr[i].split('=')[1];
        }
        returnurl = returnurl + arr[i].split('=')[0] + "=" + setparam + "&";
    }

    returnurl = returnurl.substr(0, returnurl.length - 1);

    if (modify == "0")
        if (returnurl == str)
            returnurl = returnurl + "&" + ref + "=" + value;
}
else {
    if (str.indexOf('=') != -1) {
        arr = str.split('=');

        if (arr[0] == ref) {
            setparam = value;
            modify = "1";
        }
        else {
            setparam = arr[1];
        }
        returnurl = arr[0] + "=" + setparam;
        if (modify == "0")
            if (returnurl == str)
                returnurl = returnurl + "&" + ref + "=" + value;
    }
    else
        returnurl = ref + "=" + value;
}
return url.substr(0, url.indexOf('?')) + "?" + returnurl;

}

function delQueStr(url, ref) //删除参数值
{

var str = "";

if (url.indexOf('?') != -1)
    str = url.substr(url.indexOf('?') + 1);
else
    return url;
var arr = "";
var returnurl = "";
var setparam = "";
if (str.indexOf('&') != -1) {
    arr = str.split('&');
    for (i in arr) {
        if (arr[i].split('=')[0] != ref) {
            returnurl = returnurl + arr[i].split('=')[0] + "=" + arr[i].split('=')[1] + "&";
        }
    }
    return url.substr(0, url.indexOf('?')) + "?" + returnurl.substr(0, returnurl.length - 1);
}
else {
    arr = str.split('=');
    if (arr[0] == ref)
        return url.substr(0, url.indexOf('?'));
    else
        return url;
}

}

switch(n)
{

case 1:
  执行代码块 1
  break;
case 2:
  执行代码块 2
  break;
default:
n 与 case 1 和 case 2 不同时执行的代码

}

// 点击获取 定时访问,取消定时
$(function(){

var myVar = null;
var myCle = null;
//每个3秒钟检测一次
function setTimeing() {
    clearInterval(myVar);//清除之前的检测
    myVar = setInterval(function(){checkLoginStatus()}, 2000);
    clearTimeout(myCle);//清除之前的计划
    myCle = setTimeout(function () {clearInterval(myVar);},1000*30);//300秒后清除登陆检测
}
//检测微信登陆状态
function checkLoginStatus() {
    $.ajax({
        type: 'POST',
        url: '/wei/check-login.php',
        success: function(data){
            if (data == true) {
                window.location.reload(true);
            }
        }
    });
}
//加载微信登录信息
function getWeixinLoginPic() {
    $.ajax({
        type: 'POST',
        dataType:'json',
        url: '/wei/weixin-pic.php',
        success: function(data){
            $('.login-wexin img').attr('src',data.src);
            setTimeing();
        }
    });
}

$('body').on('click', '.login-weixin',function(event){
        getWeixinLoginPic();
        event.stopPropagation();
});
$('.close-btn').click(function(){
    $('.aj-popbox').hide(0,function(){
        $('body').css('overflow','auto');
    });
})

});

<input type="text" value="{$share_url}" id="fzhi"

   style="-webkit-user-select: text !important;position:absolute;left: -10000px;z-index:1000"
   onclick="oCopy(this)" readonly>


{$share_url}

实现屏幕录像
var body = document.body;
body.addEventListener("click",async function(){

var stream = await navigator.mediaDevices.getDisplayMedia({video: true});
var mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9") ?"video/webm; codecs=vp9" :"video/webm";
 var mediaRecorder = new MediaRecorder(stream, {mimeType: mime});         //录制
  var chunks = [];
  mediaRecorder.addEventListener('dataavailable', function(e) {
    chunks.push(e.data)
})         //停止
mediaRecorder.addEventListener('stop', function(){            var blob = new Blob(chunks, {type: chunks[0].type});
    var url = URL.createObjectURL(blob);
    var a = document.createElement('a');
    a.href = url;
    a.download = 'video.webm';
    a.click();
})        //手动启动
mediaRecorder.start() 

});