1927年,第五届索尔维会议在比利时布鲁塞尔召开。这次会议的主题是“电子和光子”,探讨了量子力学和光子辐射等领域的问题。在这次会议上,二十九位当时世界著名的物理学家在一张照片上留下了自己的身影,其中十七位是诺贝尔奖得主,包括阿尔伯特·爱因斯坦、尼尔斯·玻尔、沃纳·海森堡、埃尔温·薛定谔等。这张照片成为物理学史上一件具有里程碑意义的珍贵文物,被广泛传播并载入史册。这次会议对物理学的发展产生了深远的影响,尤其是对量子力学的发展。在会议上,物理学家们进行了激烈的讨论和辩论,探讨了量子力学的解释和描述问题,对量子力学的进一步发展产生了重要影响。 看看大家能认出几位...
阡陌 发布的文章
阡陌Modbus 通信协议
Modbus 是一个请求/应答协议,是由 Modicon(现为施耐德电气公司的一个品牌)在 1979 年发明的,是全球第一个真正用于工业现场的总线协议。 Modbus 采用主站询问或命令的方式通信,从站不能主动上报。只能通过增大主站轮询频率的办法增强实时性。 Modbus 的传送有 3 种模式:Modbus ASCII、Modbus RTU、Modbus TCP。 Modbus ASCII 用 Hex 字符表示值,例如要传送一个字节值 0x2A 则发送两个字节字符 "2A"。 帧格式: Modbus RTU 帧格式: CRC 校验是 16 位的,低字节在前。 不同类型帧的数据域定义是不同的,几种情况: 读寄存器时主机的数据域: 寄存器地址、寄存器个数等数值按高字节在前方式传输。 读寄存器时从机正确应答的数据域: 寄存器是 16 位的,所以 数据字节数 = 寄存器个数 * 2 从机异常应答的数据域: 异常应答的功能码的最高位为1。 Modbus TCP 由于 TCP 是可靠传输,所以相比 RTU 格式没有 CRC 校验域。 帧格式: 传输标志:请求和响应传输过程中序列号 协议标志:默认为 0 长度:值为长度域后所有内容的字节数,同样地也是大端模式传输 单元标志:串行链路或其它总线上连接的远程从站识别码,通常是 0 Modbus RTU 与 Modbus TCP 的区...
Arduino IDE(集成开发环境)
访问 Arduino 官方网站软件下载页面:https://www.arduino.cc/en/software 提供了多种版本的 IDE 可供选择,最上边的两个一个是在线 IDE,另一个是供下载到本地运行的 IDE。 前者在编辑器方面提供了与桌面版几乎一样的体验,代码会保存在云上,而且不需要安装板载包,还包含了大部分流行的库,如果需要也可以上传自己的库。不过我认为下载 IDE 并在本地开发更适合初学者。 下载软件是免费的,你也可以在下载页面选择捐赠以支持 Arduino 开发团队的工作。下载安装后初次运行会安装一些驱动程序和下载一些包,默认允许即可。 此外还可以使用 Visual Studio Code + PlatformIO 等,后续单独介...
Arduino 编程语言介绍
Arduino 使用的编程语言是建立在 C/C++ 基础上的。虽然 C++ 兼容 C 语言,但它们是两种语言,具有不同的特性。C 是一种面向过程的编程语言,而 C++ 则引入了面向对象的概念。 Arduino 语言实际上是一套基于 C/C++ 的嵌入式设备开发框架,它提供了丰富的库函数和应用程序编程接口(API),以简化硬件设备的驱动和编程。这些 API 是对底层单片机支持库的二次封装,隐藏了复杂的底层细节,使得不熟悉硬件的用户也能轻松上手。所以说 Arduino 使用的 C++ 也只是标准 C++ 的一个子集,不包括所有的 C++ 标准库,因为这些库可能会占用太多的内存或处理器时间。例如,它不支持类继承和模板。但是,它仍然提供了足够的功能来编写复杂的程序,并且可以与其他 C++ 代码进行交互。 在 Arduino 编程中,常用的关键字包括 if、else、for、switch、case、while 等,这些关键字用于实现条件选择、循环、分支等控制结构。此外,Arduino 还引入了一些特殊的函数和宏定义,如 pinMode()、digitalWrite()、analogRead() 等,用于配置引脚模式、读写数字信号和模拟信号等操作。 Arduino 编程的一个显著特点是其清晰明了的 API 和简化的语法。通过调用相应的库函数和 API,用户可以轻松地控制硬件设备的各种功能,如 LED 闪烁、传感器读取、电机控制等。这种简化的编程方式降低了学习难度,使得更多人能够参与到硬件开发的领域中来。 总结来说,Arduino 编程语言是一种基于 C/C++ 的嵌入式设备开发语言,通过提供丰富的库函数和 API,简化了硬件设备的驱动和编程过程。它使得不熟悉硬件的用户也能轻松上手,并且广泛应用于教育、艺术、物联网等领...
Arduino 硬件介绍
Arduino 是一款开源的电子原型平台,包括各种型号的 Arduino 板和相应的开发环境软件。Arduino 板具有简单易用的特点,能够读写数字或模拟输入/输出引脚、使用 USB 接口进行通信、通过编程控制各种电子设备和传感器等。 以下是 Arduino 的一些主要硬件特性: 处理器:Arduino 板搭载了各种型号的微控制器,如 ATmega328(在 Arduino Uno 上)或 ATmega2560(在 Arduino Mega 上)。这些微控制器是 Arduino 板的核心,负责执行用户上传的程序。当然了还有很多衍生的板子搭载了其他厂商的 MCU,比如 STM32 等。 数字 I/O 引脚:Arduino 板具有多个数字输入/输出引脚,这些引脚可以读取或写入数字信号,用于控制 LED、电机等设备或读取按钮、开关等输入信号。 模拟输入引脚:一些 Arduino 板还具有模拟输入引脚,可以读取模拟信号,如温度传感器的输出电压。这些引脚通常具有 10 位的分辨率,即可以读取 0 到 1023 之间的值。 USB 接口:大多数 Arduino 板都具有 USB 接口,用于与计算机进行通信和供电。通过 USB 接口,用户可以上传程序到 Arduino 板,也可以从 Arduino 板读取数据。 电源和复位引脚:Arduino 板还具有电源和复位引脚,用于给板子供电和在需要时复位微控制器。 扩展接口:一些 Arduino 板还具有扩展接口,如 ICSP 头或 SPI/I2C 接口,可以用于连接其他扩展板或模块。 Arduino 板的尺寸和形状各异,以适应不同的应用场景。例如,Arduino Uno 是最常见的型号之一,具有标准的 USB 接口和足够的 I/O 引脚,适合大多数初学者和项目。而 Arduino Mega 则具有更多的 I/O 引脚和更大的内存,适合需要更多控制和数据处理能力的项目。 除了标准的 Arduino 板外,还有许多其他型号和变种可供选择,如 Arduino Leonardo、Arduino Micro 等。这些板子具有不同的处理器、引脚配置和功能特性,以满足不同的需求和应用场...
Arduino 简介
Arduino(读音:Arr du ee no,大约是:阿杜- 依no)是一个源于意大利的开源电子原型平台,自 2005 年诞生以来,已经在全球范围内引领了一场硬件创新的革命。以其易用性、灵活性和开源的特性,Arduino 为艺术家、设计师、研究人员和业余爱好者提供了一个全新的工具,以实现他们的创意。 Arduino 的起源可以追溯到 2003 年,当时两名意大利教师 Massimo Banzi 和 David Cuartielles 为了给他们的学生们提供一个更容易实现交互项目的工具,开始设计一种简单的、价格适中的、易于使用的硬件平台。这个平台就是 Arduino 的雏形。 最初的 Arduino 板是由 Banzi、Cuartielles 以及西班牙籍学者 Javier Zagal 在他们的家乡 Ivrea 设计出来的,并在 2005 年正式发布。据说其名来源于 Banzi 经常光顾的一家酒吧的名字”di Re Arduino“。 随着时间的推移,Arduino 不断发展,推出了多种型号,如 Arduino Uno、Arduino Mega、Arduino Mini 等,适应了各种不同的应用场景。 目前的应用概况: 教育领域:在教育领域,Arduino 已成为许多学校和机构的必备工具。学生们使用 Arduino 进行各种实验,学习电子、编程和机器人技术,提高他们的创新能力。 艺术和设计领域:艺术家和设计师们利用 Arduino 创造出各种交互式装置和艺术作品,如动态雕塑、交互式服装等。 物联网:Arduino 在物联网领域的应用广泛,例如智能家居系统、环境监测站等。通过与传感器和其他设备的连接,Arduino 可以实现远程控制和数据收集。 机器人:Arduino 是许多机器人项目的核心组件,从简单的玩具机器人到复杂的自主导航机器人都可以看到 Arduino 的身影。 工业自动化:在工业自动化领域,Arduino 被用于控制和监测生产线上的设备和机器。例如,它可以用来控制机械臂的运动或监测温度和湿度等环境参数。 嵌入式系统开发:虽然 Arduino 主要用于快速原型制作,但它也可以作为嵌入式系统的开发平台。通过使用 Arduino,开发人员可以快速构建和测试嵌入式系统的硬件和软件。 健康和医疗设备:在健康和医疗设备领域,Arduino 可以用于开发各种可穿戴设备、健康监测设备和医疗诊断工具等。例如,通过使用 Arduino 和传感器,可以开发出用于监测心率、血压或血糖水平的设备。 娱乐产业:在娱乐产业中,Arduino 也被广泛应用于各种项目,如灯光秀、音乐设备和游戏控制器等。 从教育到工业,从艺术到娱乐,Arduino 的影响力无处不在。它不仅降低了硬件开发的门槛,让更多的人能够参与到创新的实践中来,同时也推动了开源硬件和物联网的发展。未来,随着技术的进步和应用场景的不断拓展,Arduino 将会在更多领域发挥其巨大的潜...
使用 Certbot 获取 Let’s Encrypt 证书
Let’s Encrypt https://letsencrypt.org/ Let’s Encrypt is a free, automated, and open Certificate Authority. Certbot Automatically enable HTTPS on your website with EFF's Certbot, deploying Let's Encrypt certificates. Install: On Ubuntu systems, the Certbot team maintains a PPA. Once you add it to your list of repositories all you'll need to do is apt-get the following packages. $ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update $ sudo apt-get install python-certbot-nginx $ sudo certbot --nginx $ sudo certbot renew --dry-run #自动更新 执行该命令会创建系统级 cron 任务:/etc/cron.d/certbot,会每天检查两...
Ubuntu 安装 MariaDB 数据库服务
MariaDB 由 MySQL 的创始人 Michael Widenius 主导开发,是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。MariaDB 的目的是完全兼容 MySQL,包括 API 和命令行,使之能轻松成为 MySQL 的代替品。在存储引擎方面,使用 XtraDB 来代替 MySQL 的 InnoDB。 MariaDB 的 API 和协议兼容 MySQL,另外又添加了一些功能,以支持本地的非阻塞操作和进度报告。这意味着,所有使用 MySQL 的连接器、库和应用程序也将会在 MariaDB 下工作。 安装 MariaDB: sudo apt install mariadb-server mariadb-client 检查 MariaDB 的状态 systemctl status mariadb 输出: ● mariadb.service - MariaDB 10.6.12 database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2023-12-11 17:13:04 UTC; 59s ago Docs: man:mariadbd(8) https://mariadb.com/kb/en/library/systemd/ Process: 21940 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS) Process: 21941 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) Process: 21943 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl> Process: 21982 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) Process: 21984 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS) Main PID: 21972 (mariadbd) Status: "Taking your SQL requests now..." Tasks: 8 (limit: 2220) Memory: 60.8M CPU: 1.084s CGroup: /system.slice/mariadb.service └─21972 /usr/sbin/mariadbd 如果 MariaDB 未处于活动状态,则启动它: systemctl start mariadb 使用以下命令在启动时自动启动 MariaDB: systemctl enable mariadb 数据库安全相关初始化: sudo mysql_secure_installation 交互: NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have your root account protected, so you can safely answer 'n'. Switch to unix_socket authentication [Y/n] n #是否切换 unix_socket 身份验证 ... skipping. You already have your root account protected, so you can safely answer 'n'. Change the root password? [Y/n] y #是否更改 root 登录密码 New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y #是否删除匿名用户 ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y #是否禁止 root 远程登录 ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y #是否删除测试数据库 - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y #是否重新加载权限表 ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB! 登录 MariaDB: mariadb -u root -p 退出 MariaDB: exit 检查 MariaDB 版本: mariadb --version 输出: mariadb Ver 15.1 Distrib 10.6.12-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrappe...
在 Hugo PaperMod 主题中加入数学支持的最简方式
目的:在不修改主题的情况下支持数学公式。 在当前的写作仓库内创建 layouts/partials/math.html 文件,写入以下内容: <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.css" integrity="sha384-bYdxxUwYipFNohQlHt0bjN/LCpueqWz13HufFEV1SUatKs1cm4L6fFgCi1jT643X" crossorigin="anonymous"> <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.js" integrity="sha384-Qsn9KnoKISj6dI8g7p1HBlNpVx0I8p1SvlwOldgi3IorMle61nQy4zEahWYtljaz" crossorigin="anonymous"></script> <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script> <script> document.addEventListener("DOMContentLoaded", function() { renderMathInElement(document.body, { // customised options // • auto-render specific keys, e.g.: delimiters: [ {left: '$$', right: '$$', display: true}, {left: '$', right: '$', display: false} ], // • rendering keys, e.g.: throwOnError : false }); }); </script> 其中的 display 属性指是否显示为块级元素, $ ... $ 用于行内公式,所以为 false。 然后创建 layouts/partials/extend_head.html 文件,写入以下内容: {{ if or .Params.math .Site.Params.math }} {{ partial "math.html" . }} {{ end }} 这样可以通过在文章 front matter 中设置 math 属性 true/false 来按需加载数学公式资源。 --- title: 文章标题 date: tags: math: true --- 在使用某些主题时,比如 PaperMod,会自动从站点的 layouts/partials/extend_head.html 调用局部模...
Linux 计划任务
在 Linux 系统中,定时任务是自动化和定期执行任务的重要手段。其中,crontab 和 crond 是两个核心概念。 crond crond 是 cron daemon 的缩写,是 Linux 下的一个守护进程,它负责周期性地检查并执行 crontab 中定义的定时任务。换句话说,crontab 定义了任务,而 crond 则负责执行这些任务。 crontab crontab 是 cron table 的缩写,是一个用于设置、维护或检查用户的定时任务的命令。通过编辑 crontab 文件,用户可以指定在特定时间或间隔内要执行的命令或脚本。 基本格式 crontab [选项] 文件名 -e:编辑用户的 crontab 文件; -l:列出用户当前的 crontab 内容; -r:删除用户的 crontab 文件; -i:在删除用户 crontab 文件之前进行确认。 当使用 crontab -e 命令时,系统会打开一个编辑器(通常是 vi 或 nano),供用户编辑或添加新的定时任务。 crontab 格式 每一行代表一个定时任务,格式如下: * * * * * command 分别表示分钟(0-59)、小时(0-23)、日期(1-31)、月份(1-12)、星期(0-7,0 和 7 都代表星期日)和要执行的命令。 关于通配符: *:代表所有可能的值; ,:用于指定多个值; -:用于表示一个范围值; /:用于表示重复的频率。 每次编辑完某个用户的 cron 设置后,cron 自动在 /var/spool/cron 下生成一个与此用户同名的文件,此用户的 cron 信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用 crontab -e 来编辑。cron 启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动 cron 服务。 示例 每 1 分钟执行一次 myCommand * * * * * myCommand 每小时的第 3 和第 15 分钟执行 3,15 * * * * myCommand 在上午 8 点到 11 点的第 3 和第 15 分钟执行 3,15 8-11 * * * myCommand 每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行 3,15 8-11 */2 * * myCommand 每周一上午 8 点到 11 点的第 3 和第 15 分钟执行 3,15 8-11 * * 1 myCommand 每晚的 21:30 重启 smb 30 21 * * * /etc/init.d/smb restart 每月 1、10、22 日的 4 : 45 重启 smb 45 4 1,10,22 * * /etc/init.d/smb restart 每周六、周日的 1 : 10 重启 smb 10 1 * * 6,0 /etc/init.d/smb restart 每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 smb 0,30 18-23 * * * /etc/init.d/smb restart 每星期六的晚上 11 : 00 pm 重启 smb 0 23 * * 6 /etc/init.d/smb restart 每一小时重启 smb 0 */1 * * * /etc/init.d/smb restart 晚上 11 点到早上 7 点之间,每隔一小时重启 smb 0 23-7/1 * * * /etc/init.d/smb restar...