首页
时间胶囊
壁纸
留言
统计
友链
Search
1
linux大作业(DHCP部署)
179 阅读
2
图
88 阅读
3
Python中os.mkdir()与os.makedirs()的区别及用法
82 阅读
4
英语插本笔记
70 阅读
5
C语言笔记
70 阅读
默认分类
网站搭建
学习笔记
Python
Django
opencv
机器学习
英语插本
数据结构插本笔记
物联网学习
mricropython
登录
Search
yao
累计撰写
25
篇文章
累计收到
15
条评论
首页
栏目
默认分类
网站搭建
学习笔记
Python
Django
opencv
机器学习
英语插本
数据结构插本笔记
物联网学习
mricropython
页面
时间胶囊
壁纸
留言
统计
友链
搜索到
6
篇与
的结果
2024-03-18
自制拓竹AMS笔记
mqtt连接拓竹打印机 通过mqtt连接拓竹3D打印机进行信息交互。监听拓竹换料信号,从而去控制YEC-AMS进行自动换料。连接参数:用户名:默认bblp密码:局域网模式里面的密码订阅地址:device/序列号/report发送地址:device/序列号/request端口:默认为8883地址:为局域网模式内的ip地址SSL/TLS:开启mricropython mqtt 代码from umqtt.simple import MQTTClient from machine import Pin import network import time import ujson from bambu.bambu_commands import banbu_start,START_PUSH class Bambu_mqtt_cliet: def __init__(self,mqtt_server,DEVICE_SERIAL,password,username="bblp",client_id="esp32",mqtt_port=8883): self.mqtt_server = mqtt_server # 服务器地址 self.DEVICE_SERIAL = DEVICE_SERIAL # 服务器序列好 self.username = username # 用户 self.password = password # 服务器密码 self.client_id = client_id self.mqtt_port = mqtt_port # 订阅和发送的主题 self.TOPIC_SUBSCRIBE = "device/" + DEVICE_SERIAL + "/report" self.TOPIC_PUBLISH = "device/" + DEVICE_SERIAL + "/request" self.new_message = {} # 订阅的消息 self.client = None def sub_cb(self,topic,msg): self.new_message = ujson.loads(msg).get("print",{}) # 连接和订阅 def conent_and_subscribe(self): try: self.client = MQTTClient(self.client_id, self.mqtt_server, user=self.username, password=self.password, ssl=True) self.client.set_callback(self.sub_cb) self.client.connect() self.client.subscribe(self.TOPIC_SUBSCRIBE) print("成功连接到 %s, 订阅地址为 %s topic" % (self.mqtt_server, self.TOPIC_SUBSCRIBE)) except Exception as e: print("连接失败",str(e)) def loop_updata(self): while True: time.sleep(1) self.client.check_msg() try: self.piblish(START_PUSH) except Exception as e: self.new_message = {} time.sleep(10) self.conent_and_subscribe() print("发布出错了",e) print("结束") def piblish(self,operation_code): self.client.publish(self.TOPIC_PUBLISH, operation_code, retain=True) mircropython 驱动tt电机 DRV8833 具有两个 NMOS H 桥驱动器,使其能够控制两个直流有刷电机、一个双极步进电机、螺线管和其他电感负载。 它的工作电压范围为 2.7 V 至 10.8 V,每个通道可连续提供高达 1.2 A 的电流。此外,它还可以承受每通道高达 2 A 的峰值电流几秒钟。 DRV8833 还包含多种保护功能,例如欠压锁定、过流和过热保护,提供高水平的可靠性。这些事件中的每一个都会禁用 H 桥 MOSFET。故障情况消除后,设备将恢复运行。 它还包括低功耗睡眠模式,可让您节省电量,尤其是在电机不使用时。 所有这些功能使其成为为小型低压电机供电的绝佳选择。驱动旋转:两个引脚的高低电平设置旋转方向和驱动旋转旋转速度:通常为高电平的引脚上使用脉宽调制输入1/输入3输入2/输入4旋转方向低(0)低(0)电机关闭高(1)低(0)向前低(0)高(1)向后高(1)高(1)电机关闭当前进展:电路升级为8通,pcb绘制等待中,注意微动开关要与引脚直接连接。参考地址DRV8833使用说明
2024年03月18日
55 阅读
0 评论
1 点赞
2022-12-26
网站需要的代码和文件
主题cssbody { --theme: #409eff; --background: rgba(255,255,255,0.75); --main: #303133; --routine: #696969; --minor: #696969; --seat: #c0c4cc; --classA: rgba(255,255,255,0.00) ; --classB: rgba(255,255,255,0.0) ; --classC: rgba(255,255,255,0.75) ; --classD: rgba(255,255,255,0.0) ; --radius-wrap: 8px; --radius-inner: 4px; --text-shadow: 0 1px 2px rgba(0, 0, 0, 0.95); --box-shadow: 0px 0px 20px -5px rgba(158, 158, 158, 0.9); }数学公式<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js? config=TeX-AMS-MML_HTMLorMML"> </script> <script type="text/x-mathjax-config"> MathJax.Hub.Config({ extensions: ["tex2jax.js"], jax: ["input/TeX", "output/HTML-CSS"], tex2jax: { inlineMath: [ ['$','$'], ["\\(","\\)"] ], displayMath: [ ['$$','$$'], ["\\[","\\]"] ], processEscapes: true }, "HTML-CSS": { availableFonts: ["TeX"] } }); </script>侧边音乐<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css"> <script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/meting@2.0.1/dist/Meting.min.js"></script> <meting-js server="netease" type="playlist" id="7010908289" fixed="false" mini="false" order="random" loop="all" preload="none" list-folded="true"> </meting-js>友链joe设置目录图片
2022年12月26日
44 阅读
0 评论
0 点赞
2022-12-14
线性回归
线性回归一元函数线性回归,通过输入值x和输出值y进行模型训练,得到一个预测函数为$ y=w_{0}+w_{1}x $ 这里的$w_{0},w_{1}$是我们需要的模型训练的值.损失函数:用来评价模型的好坏。线性回归用均方误差来进行评估真实值与预测值得差异,且通过损失函数来优化模型,使其损失函数取得极小值。方式如下(其中的除以二是为了后面求导后方便计算)$loss =\frac{1}{2m} \sum_{i=1}^m(w_{0}+w_{1}x_{i} -y)^{2} 即 \frac{1}{2m} \sum_{i=1}^m (y_{i}`-y)^{2}$自定义梯度下降通过自定义梯度下降算法规则,求出$w_{0},w_{1}$绘制回归初始参数设置:随机初始值w1,w0,设置迭代次数,设置学习率(更新模型的速率,一般在0~1范围)求损失函数关于w0,w1的偏导数,从而去迭代更新模型的参数w0,w1# 自定义梯度下降方法求线性回归 import numpy as np import matplotlib.pyplot as plt train_x = np.array([0.5,0.6,0.8,1.1,1.4]) #创建训练的数据x和对应的y train_Y = np.array([5.0,5.5,6.0,6.8,7.0]) w0,w1 = 1,1 #设置w0,w1初始值,后去更新这个权重和偏执 times = 1000 #更新次数 lrate = 0.01 #学习率,用来更新的模型的速率 for i in range(1,times+1): #求损失函数关于w0,w1的偏导数,从而去更新模型的参数 d0 = (w0+w1*train_x-train_y).mean() d1 = ((w0+w1*train_x-train_y)*train_x).mean() #根据梯度下降的公式,更新w0,w1 w0 = w0- lrate*d0 w1 = w1-lrate*d1 y = w0+w1*train_x #预测数据 plt.title("linear regeression") plt.grid() plt.plot(train_x,train_y,"or",label="samples") plt.plot(train_x,y,"-",label="regression line") plt.legend() plt.show() print("w0:",w0) print('w1:',w1) print("loss:",((w0+w1*train_x-train_y)**2).mean())如图是运行后的结果:我们可以修改以下代码,将每次更新的点进行保存起来,其观看损失函数和w0,w1的变化,代码如下:from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt import numpy as np train_x = np.array([0.5,0.6,0.8,1.1,1.4]) #创建训练的数据x和对应的y train_y = np.array([5.0,5.5,6.0,6.8,7.0]) n = 500 w0_grid,w1_grid = np.meshgrid( np.linspace(0,9,n), np.linspace(0,3.5,n) ) #生成网格点坐标矩阵。 loss_grid = 0 #损失函数值 for x,y in zip(train_x,train_y): loss_grid += (w0_grid+w1_grid*x-y)**2/2 plt.figure('loss function',figsize=(20,8)) ax3d = plt.subplot(projection='3d') ax3d.set_xlabel("w0") ax3d.set_ylabel("w0") ax3d.set_zlabel("loss") ax3d.plot_surface(w0_grid,w1_grid,loss_grid/len(train_x),cstride=20,rstride=20,cmap="jet",alpha=0.7) # 生成训练数据 w0,w1,losses= [1],[1],[] times = 1000 #更新次数 lrate = 0.1 #学习率,用来更新的模型的速率 for i in range(1,times+1): losses.append(((w0[-1]+w1[-1]*train_x-train_y)**2).mean()/2) #求损失函数关于w0,w1的偏导数,从而去更新模型的参数 d0 = (w0[-1]+w1[-1]*train_x-train_y).mean() d1 = ((w0[-1]+w1[-1]*train_x-train_y)*train_x).mean() #根据梯度下降的公式,更新w0,w1 w0.append(w0[-1]- lrate*d0) w1.append(w1[-1]-lrate*d1) ax3d.plot3D(w0[:-1],w1[:-1],losses,'o-',color='r') plt.tight_layout() plt.show()以下图示:是代码运行结果我们可以从这个图中我们看到w0与w1的更新路径,都是沿着损失函数的的梯度下降,在设置学习率的时候,过大时候会梯度爆炸和梯度消失,以下是取不同的学习率w0,w1,loss的变化:线性回归apiimport numpy as np import matploylib.pyplot as plt import sklearn.linear_model as lm #线性回归模型包 # 读取数据 x, y = np.loadtxt(file_path,delimiter=",", unpack=True) # file_path: 是一个二维数据的txt文件 x = x.reshape(-1,1) # 变维:n行一列 model = lm.LinearRegression() # 构建模型 model.fit(x,y) # 训练模型 pred_y = model.predict(x) #输入x,获得预测值y评价线性模型评价线性模型函数: 平均绝对值误差,平均平方误差,中位绝对误差,R2评分误差平均绝对误差: $\frac{1}{m}\sum_{m}|(y`-y)|$平均平方误差: $\sqrt{\frac{1}{m}\sum_{m}(y`-y)^{2}}$中位绝对值误差:$median(|y`-y|)$$决定系数:r^{2}得分,(0,1)区间的分值,分数越高,误差越小.R^{2}=1-\frac{\sum(y_{i}-y`_{i})^{2}}{\sum(y_{i}-y_{mean})^{2}}$import sklearm.metrics as sm # 平均绝对误差 sm.mean_absolute_error(y,pred_y) # 平均平方误差 sm.mean_squared_error(y,pred_y) # 中位数绝对值误差: sm.median_absoulute_error(y,pred_y) # 决定系数 sm.r2_score(y.pred_y)模型的保存和加载我们训练完后需要保存模型,在下一次使用直接加载模型,这样就不用在使用的时候再一次训练模型.且训练模型的时间是一个耗时的过程apiimport pickle pickle.dump(model,file_path) #保存模型, model为训练的模型,file_path为保存文件,一般为pkl文件 model = pickle.load(file_path) # 加载模型 #保存模型 with open(file_path,"wb") as f: pickle.dump(model,f) # 加载和使用模型 with open(file_path,"rb") as f: model = pickle.load(f) pred_y = model.predict(x) # 使用模型预测
2022年12月14日
33 阅读
0 评论
0 点赞
2022-03-07
Django之数据库操作orm
1 ORMDjango开发操作数据库更简单,内部提供了ORM框架ORM可以帮助我们做两件事:创建、修改、删除数据库中的表(不用你写SQL语句)。 【无法创建数据库】操作表中的数据(不用写SQL语句)。操作教程1. 自己创建数据库启动MySQL服务自带工具创建数据库create database gx_day15 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;2. django连接数据库在settings.py文件中进行配置和修改。DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'gx_day15', # 数据库名字 'USER': 'root', 'PASSWORD': 'root123', 'HOST': '127.0.0.1', # 那台机器安装了MySQL 'PORT': 3306, } }3.django操作表创建表删除表修改表创建表:在models.py文件中执行命令:python manage.py makemigrations python manage.py migrate注意:app需要提前注册。在表中新增列时,由于已存在列中可能已有数据,所以新增列必须要指定新增列对应的数据:1,手动输入一个值。设置默认值age = models.IntegerField(default=2)允许为空data = models.IntegerField(null=True, blank=True)以后在开发中如果想要对表结构进行调整:在models.py文件中操作类即可。命令python manage.py makemigrations python manage.py migrate4.表中的数据# #### 1.新建 #### # Department.objects.create(title="销售部") # Department.objects.create(title="IT部") # Department.objects.create(title="运营部") # UserInfo.objects.create(name="武沛齐", password="123", age=19) # UserInfo.objects.create(name="朱虎飞", password="666", age=29) # UserInfo.objects.create(name="吴阳军", password="666") # #### 2.删除 #### # UserInfo.objects.filter(id=3).delete() # Department.objects.all().delete() # #### 3.获取数据 #### # 3.1 获取符合条件的所有数据 # data_list = [对象,对象,对象] QuerySet类型 # data_list = UserInfo.objects.all() # for obj in data_list: # print(obj.id, obj.name, obj.password, obj.age) # data_list = [对象,] # data_list = UserInfo.objects.filter(id=1) # print(data_list) # 3.1 获取第一条数据【对象】 # row_obj = UserInfo.objects.filter(id=1).first() # print(row_obj.id, row_obj.name, row_obj.password, row_obj.age) # #### 4.更新数据 #### # UserInfo.objects.all().update(password=999) # UserInfo.objects.filter(id=2).update(age=999) # UserInfo.objects.filter(name="朱虎飞").update(age=999)
2022年03月07日
12 阅读
1 评论
0 点赞
2022-02-13
音乐
{music-list id="7010908289" color="#1989fa" autoplay="autoplay"/}隐藏内容,请前往内页查看详情{lamp/}{timeline} {timeline-item color="#19be6b"} 正式上线 {/timeline-item} {timeline-item color="#ed4014"} 删库跑路 {/timeline-item} {/timeline}{tabs} {tabs-pane label="标签一"} 标签一内容 {/tabs-pane} {tabs-pane label="标签二"} 标签二内容 {/tabs-pane} {/tabs}{card-describe title="卡片描述"} 卡片内容 {/card-describe}{collapse} {collapse-item label="折叠标题一" open} 折叠内容一 {/collapse-item} {collapse-item label="折叠标题二"} 折叠内容二 {/collapse-item} {/collapse}{alert type="success"} 警告提示 {/alert}
2022年02月13日
16 阅读
0 评论
0 点赞
2022-02-07
KSWEB PHP+MySQL环境搭建及应用
1. KSWEB ksweb是 一个Android端的服务器容器。有 2.7.2 及 2.8.2 版本,可以用下面链接下载: http://bbs.xiaomi.cn/thread-9690863-1-1.html在Android设备上安装这个apk后,启动就会自动化安装好 php环境和mysql。现在我们就可以在浏览器中输入: http://192.168.0.108:8080/ 访问服务器了,可以看到 Welcome! 界面。 2. PhpMyAdmin phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。1)点开MYSQL管理时,选择PHPMYADMIN,出现了问题,说 /ksweb 目录下没有phpMyAdmin 文件夹要不要安装创建,那当然点是了,然后又弹出下载错误的框?解决:下载一个 phpMyAdmin ,解压放到 /ksweb 目录下。2)PHP环境配置?进入:http://127.0.0.1/phpMyAdmin 出错!在phpmyadmin中找到config.inc.php文件,增加下面这一行就可以了:$cfg['Servers'][$i]['port'] = '3306';输入: http://192.168.0.108:10000/ 就可以看到phpMyAdmin的登录界面。3) 在安装完MySQL 服务器 之后,我们使用phpmyadmin进行登陆mysql管理,但输入root用户名及密码之后,点击登陆提示如下错误: #1045 无法登录 MySQL 服务器解决:修改/home/wwwroot/phpmyadmin/libraries/config.default.php 文件,找到下面两行$cfg['Servers'][$i]['nopassword'] = false;$cfg['Servers'][$i]['AllowNoPassword'] = false;将两个false改为true,同时设置 $cfg['Servers'][$i]['password'] = '';通过这样设置配置文件后phpmyadmin 就会允许以空密码方式登录mysql数据库了。 3. 用phpMyAdmin更改root密码的方法 1) 修改 phpmyadmin首先用root账号登陆phpmyadmin,然后点击左侧进入mysql数据库,在顶部点击“mysql”进入sql输入界面。输入以下命令:update user set password=password('root') where User='root'root为你希望修改的密码,切记不要在数据库中直接手工修改密码。然后点击右下角的“执行”,看到如下界面,就表示修改成功。2)修改mysql接着还要进入phpmyadmin目下下的libraries目录,修改config.default.php文件。找到$cfg['Servers'][$i]['password'] = ‘ ‘,修改为$cfg['Servers'][$i]['password'] = ‘root′; root就是您想要的密码。记住第一步是phpmyadmin的密码修改第二步是mysql的密码修改,mysql密码不该,phpmyadmin也不会生效,两个一起改才可以。4. 在 phpmyadmin 中执行SQL语句 首先登录phpMyAdmin,用上面修改的密码。进入到一个数据库,点击SQL 在编辑框中编写SQL命令,执行。 (如果进入到某个表中,再执行sql语句就不能成功。)1) 建立表CREATE TABLE people (`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` VARCHAR( 100 ) NOT NULL , `sex` BOOL NOT NULL DEFAULT '1', `birthyear` INT NOT NULL ) 表名 、段名 都要用“·”号括起来,这个符号是ESC下面那个键。2)插入 INSERTinsert into people(name,sex,birthyear) values('mars',0,1988);insert into people values(null,'mars',0,1988);3) 查询 selectselect id,name from people where id=1;SELECT * FROM people WHERE name='mars';SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')AND LastName='Carter'引号的使用: 请注意,我们在例子中的条件值周围使用的是单引号。在表中,可能会包含重复值。有时您也许希望仅仅列出不同(distinct)的值,相同的值就只出现一次。SELECT DISTINCT Company FROM Orders ;4) 排序、分组、计算分组语句:group by 字段排序语句:order by 字段,字段 ASC / DESC指针查询:limit 初始值,结束值select name from people order by birthyear ASC;5)Update 更新语句 update people set name='快刀王五' where id=1;6)Delete 删除 delete from people where id=1;5. 使用 SQLyog 管理MySQL. 先要远程连接上:初次登陆使用系统 root 账户,密码 root ;注意主机地址为第 4 步中提示的 ip 地址;这里遇到了几个问题:1.ERROR 1130: Host 192.168.3.100 is not allowed to connect to this MySQL server这是无法给远程连接的用户权限问题。将mysql中user表的root用法的Host,从'localhost ' 改为 '%'. 可以用命令: update user set Host='%' where Host='localhost' and User=’root’ 即可。错误信息:ERROR 1045 (28000): Access denied for user 'usera'@'localhost' (using password:YES)处理:创建用户账号
2022年02月07日
18 阅读
0 评论
0 点赞