<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>編程三兩事 &#8211; Simon</title>
	<atom:link href="https://www.luisimon.com/category/%E7%B7%A8%E7%A8%8B%E4%B8%89%E5%85%A9%E4%BA%8B/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.luisimon.com</link>
	<description>blog</description>
	<lastBuildDate>Sun, 01 Sep 2024 09:44:35 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.2</generator>

<image>
	<url>https://www.luisimon.com/wp-content/uploads/2019/09/cbrks-x5t4i-001.ico</url>
	<title>編程三兩事 &#8211; Simon</title>
	<link>https://www.luisimon.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>奥克斯(AUX)风扇遥控器协议</title>
		<link>https://www.luisimon.com/2024/09/01/897/</link>
		
		<dc:creator><![CDATA[Alan]]></dc:creator>
		<pubDate>Sun, 01 Sep 2024 06:04:26 +0000</pubDate>
				<category><![CDATA[单片机]]></category>
		<category><![CDATA[編程三兩事]]></category>
		<category><![CDATA[红外]]></category>
		<guid isPermaLink="false">https://www.luisimon.com/?p=897</guid>

					<description><![CDATA[分析可知，奥克斯遥控器应该是私有协议不同于NEC协议。 由逻辑分析仪图可以看出，每个位的信号周期由400us和 ... <a title="奥克斯(AUX)风扇遥控器协议" class="read-more" href="https://www.luisimon.com/2024/09/01/897/" aria-label="继续阅读奥克斯(AUX)风扇遥控器协议">阅读更多</a>]]></description>
										<content:encoded><![CDATA[
<p>分析可知，奥克斯遥控器应该是私有协议不同于NEC协议。</p>



<p>由逻辑分析仪图可以看出，每个位的信号周期由400us和1200us组成。根据抓取到遥控器所有按键信号数据，分析前面4bit是固定的，后8bit可以理解位数据。注意：由于此协议无固定结束信号，所以最后1bit在分析仪上看并不完整，只需要判断低电平时长即可。</p>



<p>命令需要发送至少2次，每次间隔8ms。</p>



<p>笔者定义：</p>



<ul class="wp-block-list">
<li>1.2ms载波（低电平）+400us空闲（高电平）为“1”。</li>
</ul>



<ul class="wp-block-list">
<li>400us载波（低电平）+1.2ms空闲（高电平）为“0”。</li>
</ul>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="197" src="https://www.luisimon.com/wp-content/uploads/2024/09/AUX分析-1024x197.jpg" alt="" class="wp-image-899" srcset="https://www.luisimon.com/wp-content/uploads/2024/09/AUX分析-1024x197.jpg 1024w, https://www.luisimon.com/wp-content/uploads/2024/09/AUX分析-300x58.jpg 300w, https://www.luisimon.com/wp-content/uploads/2024/09/AUX分析-768x148.jpg 768w, https://www.luisimon.com/wp-content/uploads/2024/09/AUX分析.jpg 1162w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>將電風扇改造為支持紅外遙控的思路</title>
		<link>https://www.luisimon.com/2024/06/12/814/</link>
		
		<dc:creator><![CDATA[Simon]]></dc:creator>
		<pubDate>Wed, 12 Jun 2024 04:34:08 +0000</pubDate>
				<category><![CDATA[单片机]]></category>
		<category><![CDATA[日常]]></category>
		<category><![CDATA[C語言]]></category>
		<category><![CDATA[嘉立創]]></category>
		<category><![CDATA[紅外遙控]]></category>
		<category><![CDATA[遙控]]></category>
		<category><![CDATA[風扇]]></category>
		<guid isPermaLink="false">https://www.luisimon.com/?p=814</guid>

					<description><![CDATA[最近天氣好熱，到了開風扇的時候了。突然發現家中老舊的電風扇經過30多年的使用後，風速檔按鍵出現了一些小故障。雖 ... <a title="將電風扇改造為支持紅外遙控的思路" class="read-more" href="https://www.luisimon.com/2024/06/12/814/" aria-label="继续阅读將電風扇改造為支持紅外遙控的思路">阅读更多</a>]]></description>
										<content:encoded><![CDATA[
<p>最近天氣好熱，到了開風扇的時候了。突然發現家中老舊的電風扇經過30多年的使用後，風速檔按鍵出現了一些小故障。雖然不影響使用，修理一下也可以回復青春。但是在我看來，這個每次調速換檔都要走過去的操作的老古董已經與這個【智能】的時代和懶惰的我顯得格格不入。於是我萌生了要將它改成遙控的想法。</p>



<p>故事的開始，我先是想到了萬能的淘寶。於是用【風扇】【遙控】【改裝】這些關鍵詞進行搜索。我發現出來的結果基本都是下圖這樣的需要整個“身體”換掉。對於那個鑄鐵的老古董老，這樣的塑料件恐怕是不堪重負。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="698" height="721" src="https://www.luisimon.com/wp-content/uploads/2024/06/Screenshot-2024-06-11-192136.jpg" alt="" class="wp-image-815" srcset="https://www.luisimon.com/wp-content/uploads/2024/06/Screenshot-2024-06-11-192136.jpg 698w, https://www.luisimon.com/wp-content/uploads/2024/06/Screenshot-2024-06-11-192136-290x300.jpg 290w" sizes="(max-width: 698px) 100vw, 698px" /></figure>



<p>另外，也有直接是一套控制板的類型（如下圖），這種大概率是可以進行改裝的。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="674" height="689" src="https://www.luisimon.com/wp-content/uploads/2024/06/Screenshot-2024-06-11-195819.jpg" alt="" class="wp-image-816" srcset="https://www.luisimon.com/wp-content/uploads/2024/06/Screenshot-2024-06-11-195819.jpg 674w, https://www.luisimon.com/wp-content/uploads/2024/06/Screenshot-2024-06-11-195819-293x300.jpg 293w" sizes="(max-width: 674px) 100vw, 674px" /></figure>



<p>不過强迫症轉念一想，這豈不是很不美觀，另外也沒有狀態顯示，這顯然不合我意。</p>



<p>通過觀察和思考，我發現風扇的調速其實原來很簡單。傳統的交流電(AC)風扇實現調速其實是電機中有多組綫圈（受限于體積和成本以及實用性基本都是3組綫），給不同的綫圈進行通電會使電機輸出不同的功率，體現在風扇中就是不同的轉速。那麽我想，如果能自己設計一個電路使用（傳説中）單片機進行控制給綫圈通電，不就可能可以實現遙控了嗎。</p>



<p>於是我馬上從0開始學習單片機的控制開發。由於我本來有計算機變成的基礎，所以學習起來也是相對容易的。</p>



<p>電路設計</p>



<p>單片機允許通過編程的方式改變功能引脚的輸出狀態。OK，那麽就可以用來控制電風扇的開關狀態。不過顯然單片機使用的是低壓電直流電，不能夠直接驅動帶你風扇的電機，所以我們需要神奇的半導體【開關管】來幫我們在電路中充當開關。</p>



<p>思路</p>



<p>風扇有3個檔，那麽對應三個開關。所以我們在電路設計中需要有三個半導體開關，因爲這裏控制的是交流電，不能直接用三極管或者MOS管這種單向導通的元件。爲了減輕設計的複雜都，我這裏使用【雙向可控硅】（晶閘管）來做交流電的開關，另外配合一個【光耦】（光電耦合器）來做電氣隔離。單片機通過控制【光耦】間接控制雙向可控硅。</p>



<p>控制控制電機的開關就是這麽簡單的思路了，至於其他的還有RC（阻容）尖峰吸收的設計（主要是用來吸收電機啓停是產生的尖峰電壓）保護開關管不被擊穿。</p>



<p>聽起來好像有點複雜，確實。一開始我是想直接選用繼電器來做開關，不過想起繼電器有“噠噠噠”的聲音所以又放棄了。</p>



<p>那麽一個風扇怎麽能沒有狀態顯示呢？我是用了兩個數碼管來做狀態顯示，另外還配合了4顆LED燈珠，以及一個蜂鳴器做聲音的反饋。數碼管主要用來顯示當前的風速檔位和定時信息。</p>



<p>紅外遙控</p>



<p>電路中還需要集成一個紅外脈衝信號接收元件。由於紅外遙控的信號屬於載波信號，爲了方便單片機處理信號，我選用了直接輸出調製后信號的紅外接收傳感器，單片機可以直接處理輸出的信號。</p>



<p>至於遙控器，可以直接選用一個品牌電風扇的遙控器，使用【邏輯分析儀】分析遙控器發送的信號，自己編程做對應的處理。家中沒有遙控器，當然也可以直接在網上購買一個（如下圖）</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="686" height="680" src="https://www.luisimon.com/wp-content/uploads/2024/06/Screenshot-2024-06-12-113456.jpg" alt="" class="wp-image-818" srcset="https://www.luisimon.com/wp-content/uploads/2024/06/Screenshot-2024-06-12-113456.jpg 686w, https://www.luisimon.com/wp-content/uploads/2024/06/Screenshot-2024-06-12-113456-300x297.jpg 300w, https://www.luisimon.com/wp-content/uploads/2024/06/Screenshot-2024-06-12-113456-150x150.jpg 150w" sizes="auto, (max-width: 686px) 100vw, 686px" /></figure>



<p><strong>這是我是在【嘉立創】打樣製作的測試驗證板</strong></p>



<figure class="wp-block-video"><video controls src="https://html.luisimon.com/RDfan.mp4"></video></figure>



<p>製作這個紅外遙控板需要學習單片機編程和使用單片機資源</p>



<p>定時器</p>



<p>PWM功能</p>



<p>系統中斷</p>



<p>數碼管的控制（38譯碼器）</p>



<p>PWM方波驅動蜂鳴器</p>
]]></content:encoded>
					
		
		<enclosure url="https://html.luisimon.com/RDfan.mp4" length="3104120" type="video/mp4" />

			</item>
		<item>
		<title>士兰微SC7A20加速度传感（陀螺仪）器技术文档</title>
		<link>https://www.luisimon.com/2024/05/26/770/</link>
		
		<dc:creator><![CDATA[Simon]]></dc:creator>
		<pubDate>Sun, 26 May 2024 07:07:48 +0000</pubDate>
				<category><![CDATA[单片机]]></category>
		<guid isPermaLink="false">https://www.luisimon.com/?p=770</guid>

					<description><![CDATA[早前在制作一个T12电烙铁时，由于手柄的上架休眠功能需要用到加速度传感器，于是购买了最便宜的传感器【士兰微SC ... <a title="士兰微SC7A20加速度传感（陀螺仪）器技术文档" class="read-more" href="https://www.luisimon.com/2024/05/26/770/" aria-label="继续阅读士兰微SC7A20加速度传感（陀螺仪）器技术文档">阅读更多</a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="132" src="https://www.luisimon.com/wp-content/uploads/2024/05/1716706056899-2-1024x132.jpg" alt="" class="wp-image-771" srcset="https://www.luisimon.com/wp-content/uploads/2024/05/1716706056899-2-1024x132.jpg 1024w, https://www.luisimon.com/wp-content/uploads/2024/05/1716706056899-2-300x39.jpg 300w, https://www.luisimon.com/wp-content/uploads/2024/05/1716706056899-2-768x99.jpg 768w, https://www.luisimon.com/wp-content/uploads/2024/05/1716706056899-2.jpg 1209w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>早前在制作一个T12电烙铁时，由于手柄的上架休眠功能需要用到加速度传感器，于是购买了最便宜的传感器【士兰微SC7A20】。由于立创商城和官网所提供的这份颗芯片的文档没有给出数据的处理示例，导致走了一些弯路。下面提供一个更详细的士兰微的文档。</p>



<p class="has-medium-font-size"><strong>下载：</strong><a href="https://www.luisimon.com/goto/v57h" rel="nofollow"><strong>SC7660-SC7A30E-SC7A20内部功能应用说明书_0.2</strong></a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Arduino使用ISP烧写程序不擦除（保留）EEPROM（教程）</title>
		<link>https://www.luisimon.com/2024/05/01/736/</link>
		
		<dc:creator><![CDATA[Simon]]></dc:creator>
		<pubDate>Wed, 01 May 2024 09:14:20 +0000</pubDate>
				<category><![CDATA[单片机]]></category>
		<category><![CDATA[編程三兩事]]></category>
		<guid isPermaLink="false">https://www.luisimon.com/?p=736</guid>

					<description><![CDATA[复刻GitHub开源的基于Arduino的T12恒温电烙铁时，每次修改控制程序或者修复bug使用ISP重新升级 ... <a title="Arduino使用ISP烧写程序不擦除（保留）EEPROM（教程）" class="read-more" href="https://www.luisimon.com/2024/05/01/736/" aria-label="继续阅读Arduino使用ISP烧写程序不擦除（保留）EEPROM（教程）">阅读更多</a>]]></description>
										<content:encoded><![CDATA[
<p>复刻GitHub开源的基于Arduino的T12恒温电烙铁时，每次修改控制程序或者修复bug使用ISP重新升级程序时EEPROM的数据都会清空。导致每次都要重新录入烙铁的校准信息和配置烙铁，这样显得很麻烦。</p>



<p>其实，Arduino中有一个保险丝可以配置不擦除EEPROM。可以参考<a href="https://www.luisimon.com/goto/59lm" rel="nofollow">AVR® Fuse Calculator</a>对bootloder进行配置</p>



<p>我使用的是<strong>ATmega328P</strong>主控(MUC)</p>



<p>我们来分析一下配置</p>



<p><strong>修改前</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="788" src="https://www.luisimon.com/wp-content/uploads/2024/05/image-1024x788.png" alt="" class="wp-image-737" srcset="https://www.luisimon.com/wp-content/uploads/2024/05/image-1024x788.png 1024w, https://www.luisimon.com/wp-content/uploads/2024/05/image-300x231.png 300w, https://www.luisimon.com/wp-content/uploads/2024/05/image-768x591.png 768w, https://www.luisimon.com/wp-content/uploads/2024/05/image.png 1108w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>修改后</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="721" src="https://www.luisimon.com/wp-content/uploads/2024/05/image-1-1024x721.png" alt="" class="wp-image-738" srcset="https://www.luisimon.com/wp-content/uploads/2024/05/image-1-1024x721.png 1024w, https://www.luisimon.com/wp-content/uploads/2024/05/image-1-300x211.png 300w, https://www.luisimon.com/wp-content/uploads/2024/05/image-1-768x541.png 768w, https://www.luisimon.com/wp-content/uploads/2024/05/image-1.png 1129w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>由上面的两个图片红框的信息可以看出来，当勾选<strong>EESAVE</strong>（保留EEPROM数据）<strong>AVRDUDE<em> arguments</em></strong> 中<strong>hfuse</strong>的值由<strong>d9</strong>变成了<strong>d1</strong></p>



<p>我们来对比这两个值</p>



<p><strong>D9</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="455" height="110" src="https://www.luisimon.com/wp-content/uploads/2024/05/image-2.png" alt="" class="wp-image-739" srcset="https://www.luisimon.com/wp-content/uploads/2024/05/image-2.png 455w, https://www.luisimon.com/wp-content/uploads/2024/05/image-2-300x73.png 300w" sizes="auto, (max-width: 455px) 100vw, 455px" /></figure>



<p><strong>D1</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="442" height="107" src="https://www.luisimon.com/wp-content/uploads/2024/05/image-4.png" alt="" class="wp-image-741" srcset="https://www.luisimon.com/wp-content/uploads/2024/05/image-4.png 442w, https://www.luisimon.com/wp-content/uploads/2024/05/image-4-300x73.png 300w" sizes="auto, (max-width: 442px) 100vw, 442px" /></figure>



<p>可以看出，<strong>这个寄存器hfuse的第四位由1变成了0，可以确定第四位是用来配置是否保留EEPROM数据的</strong></p>



<p>那么我们在烧写bootloader的时候就可以配置这个寄存器的第四位为0则可实现烧写程序时保留EEPROM的数据。下面我们来看看怎么操作。</p>



<p>我使用Arduino UNO做ISP，按下图进行接线，但是需要<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">注意RESET的接线</mark></strong>（请看下面的说明）不能使用Arduino UNO上的RESET，需要根据ISP程序的定义来接线。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="684" src="https://www.luisimon.com/wp-content/uploads/2024/05/1714551572660-2-1024x684.jpg" alt="" class="wp-image-742" srcset="https://www.luisimon.com/wp-content/uploads/2024/05/1714551572660-2-1024x684.jpg 1024w, https://www.luisimon.com/wp-content/uploads/2024/05/1714551572660-2-300x201.jpg 300w, https://www.luisimon.com/wp-content/uploads/2024/05/1714551572660-2-768x513.jpg 768w, https://www.luisimon.com/wp-content/uploads/2024/05/1714551572660-2.jpg 1384w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>烧写ISP程序</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="496" height="511" src="https://www.luisimon.com/wp-content/uploads/2024/05/image-5.png" alt="" class="wp-image-744" srcset="https://www.luisimon.com/wp-content/uploads/2024/05/image-5.png 496w, https://www.luisimon.com/wp-content/uploads/2024/05/image-5-291x300.png 291w" sizes="auto, (max-width: 496px) 100vw, 496px" /></figure>



<p>按上图在Arduino IDE的【文件】->【示例】->【ArduinoISP】->【ArduinoISP】打开ISP程序的代码</p>



<p>准备烧录ISP之前来说一下RESET的接线问题</p>



<p><strong>RSET的接线</strong></p>



<p>从ISP程序的代码注释可以看出来RESET控制被定义为Pin 10</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="810" height="305" src="https://www.luisimon.com/wp-content/uploads/2024/05/image-7.png" alt="" class="wp-image-746" srcset="https://www.luisimon.com/wp-content/uploads/2024/05/image-7.png 810w, https://www.luisimon.com/wp-content/uploads/2024/05/image-7-300x113.png 300w, https://www.luisimon.com/wp-content/uploads/2024/05/image-7-768x289.png 768w" sizes="auto, (max-width: 810px) 100vw, 810px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="632" height="113" src="https://www.luisimon.com/wp-content/uploads/2024/05/image-8.png" alt="" class="wp-image-747" srcset="https://www.luisimon.com/wp-content/uploads/2024/05/image-8.png 632w, https://www.luisimon.com/wp-content/uploads/2024/05/image-8-300x54.png 300w" sizes="auto, (max-width: 632px) 100vw, 632px" /></figure>



<p>也就是<strong>被烧写的芯片的RESET引脚要接到UNO的10号引脚</strong>，如下图</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="684" src="https://www.luisimon.com/wp-content/uploads/2024/05/1714552792151-2-1024x684.jpg" alt="" class="wp-image-748" srcset="https://www.luisimon.com/wp-content/uploads/2024/05/1714552792151-2-1024x684.jpg 1024w, https://www.luisimon.com/wp-content/uploads/2024/05/1714552792151-2-300x201.jpg 300w, https://www.luisimon.com/wp-content/uploads/2024/05/1714552792151-2-768x513.jpg 768w, https://www.luisimon.com/wp-content/uploads/2024/05/1714552792151-2.jpg 1384w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>接好先之后我们直接点击【上传】即可将ISP程序烧录到UNO中。</p>



<p><strong>烧写Bootloader(引导程序)</strong></p>



<p><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">重新烧写Bootloader会导致EEPROM数据丢失</mark></strong></p>



<p><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">重新烧写Bootloader会导致EEPROM数据丢失</mark></strong></p>



<p><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">重新烧写Bootloader会导致EEPROM数据丢失</mark></strong></p>



<p>点击烧录Bootloader(引导程序)可以在输出窗口看到一下命令代码</p>



<p><strong>烧写bootloader命令</strong></p>



<pre class="wp-block-code"><code>"C:\Users\XXXX\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude" "-CC:\Users\XXXX\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf" -v -patmega328p -cstk500v1 -PCOM6 -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0xFD:m -Uhfuse:w:0xDE:m -Ulfuse:w:0xFF:m</code></pre>



<p>我们需要关注<strong>-Uhfuse:w:0xDE:m</strong>这个参数</p>



<p>前面说到<strong>hfuse</strong>的第四位需要改成0，我们可以直接用电脑计算器的程序员模式修改</p>



<p>如下图，先在计算器的16进制模式下输入DE，<strong>点击箭头所指的第四位数字将其改为0</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="475" height="535" src="https://www.luisimon.com/wp-content/uploads/2024/05/image-11.png" alt="" class="wp-image-751" srcset="https://www.luisimon.com/wp-content/uploads/2024/05/image-11.png 475w, https://www.luisimon.com/wp-content/uploads/2024/05/image-11-266x300.png 266w" sizes="auto, (max-width: 475px) 100vw, 475px" /></figure>



<p>如下图，我们得到了配置值为16进制的<strong>D6</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="467" height="530" src="https://www.luisimon.com/wp-content/uploads/2024/05/image-12.png" alt="" class="wp-image-752" srcset="https://www.luisimon.com/wp-content/uploads/2024/05/image-12.png 467w, https://www.luisimon.com/wp-content/uploads/2024/05/image-12-264x300.png 264w" sizes="auto, (max-width: 467px) 100vw, 467px" /></figure>



<p>熟悉的位运算的小伙伴可以直接使用位运算亦可</p>



<p><strong>DE &amp; F7 = D6</strong></p>



<p>将<strong>烧写bootloader命令</strong>的<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">-Uhfuse:w:0xDE:m</mark></strong>的<strong>DE</strong>改为<strong>D6</strong></p>



<pre class="wp-block-code"><code>
"C:\Users\XXXX\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude" "-CC:\Users\XXXX\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf" -v -patmega328p -cstk500v1 -PCOM6 -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0xFD:m -Uhfuse:w:0xD6:m -Ulfuse:w:0xFF:m</code></pre>



<p>执行上面的新的命令重新烧写bootloader即可。<strong>(可能会报错，需要先关闭Arduino IDE)</strong></p>



<p><strong>重要提示</strong>：<strong>烧写bootloader亦会擦除EEPROM的数据</strong></p>



<p>完结，下次使用ISP升级程序就不会清除EEPROM的数据了</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SVN仓库迁移到Git（教程）</title>
		<link>https://www.luisimon.com/2023/04/22/697/</link>
		
		<dc:creator><![CDATA[Alan]]></dc:creator>
		<pubDate>Sat, 22 Apr 2023 12:32:41 +0000</pubDate>
				<category><![CDATA[編程三兩事]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[完整迁移]]></category>
		<category><![CDATA[迁移]]></category>
		<guid isPermaLink="false">https://www.luisimon.com/?p=697</guid>

					<description><![CDATA[以下是：把SVN项目仓库整体迁移到Git上，以切换到Git版本控制。 大致流程：通过命令先把SVN库导出到本地 ... <a title="SVN仓库迁移到Git（教程）" class="read-more" href="https://www.luisimon.com/2023/04/22/697/" aria-label="继续阅读SVN仓库迁移到Git（教程）">阅读更多</a>]]></description>
										<content:encoded><![CDATA[
<p>以下是：把SVN项目仓库整体迁移到Git上，以切换到Git版本控制。</p>



<p>大致流程：通过命令先把SVN库导出到本地git仓库，再把本地仓库和远端新建仓库关联并推送到远端新仓库库中。</p>



<p>在任意目录右键，单机“Git Bash Here”打开git命令仓库，执行以下语句：</p>



<pre class="wp-block-code"><code>git config --global user.name "Alan"</code></pre>



<p>Alan为用户名称，注意是用户全名，并非有”@“符号那个URL目录名称。</p>



<pre class="wp-block-code"><code>git config --global user.email "Alan@gmail.com"   </code></pre>



<p>用户邮件，即是账号注册登录的电子邮件地址。</p>



<pre class="wp-block-code"><code>git config --list</code></pre>



<p>查看当前配置，可以看见前面设置的用户名称和电子邮件地址。</p>



<pre class="wp-block-code"><code>Alan=Alan&lt;Alan@gmail.com&gt;</code></pre>



<p>创建一个SVN与Git用户名映射的文件，左边是SVN，右边是Git。</p>



<pre class="wp-block-code"><code>git svn clone &#91;-r 282506:HEAD] &#91;svn地址] --no-metadata --authors-file=&#91;用户名映射文件] &#91;git文件夹名称(在当前目录下创建)]</code></pre>



<p>把SVN库导出成git仓库到本地。注意：-r 282506:HEAD是指定导出某一个版本的代码，不加此参数就是完整克隆SVN仓库（所有提交记录），这也是本次的目的。注意：通过SVN客户端在本地创建的库，需要导入到SVN服务端才能导入。在SVN服务端直接导入本地磁盘库目录即可。</p>



<pre class="wp-block-code"><code>cd &#91;git仓库目录]
git remote add origin &#91;git远程地址]
git remote -v #查看是否正确关联
git remote rm origin #取消关联</code></pre>



<p>进入本地git仓库(刚刚从SVN导出创建的git仓库)，并把本地git仓库与远程仓库关联。</p>



<pre class="wp-block-code"><code>git push -u origin master
git pull --rebase origin master #推送失败可以尝试：先拉取远程git项目文件(README.md)</code></pre>



<p>推送本地仓库到远程。</p>



<p>参考出处：https://www.cnblogs.com/mq0036/p/14699655.html</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>51单片机，3相步进电机驱动代码</title>
		<link>https://www.luisimon.com/2023/01/27/690/</link>
		
		<dc:creator><![CDATA[Alan]]></dc:creator>
		<pubDate>Fri, 27 Jan 2023 12:35:39 +0000</pubDate>
				<category><![CDATA[单片机]]></category>
		<guid isPermaLink="false">https://www.luisimon.com/?p=690</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<pre class="wp-block-code"><code>void main(void)
{
	unsigned char Mot_Ctrl = 0x04;
	unsigned char i = 0;
	//通过 P3.2，P3.3，P3.4 IO口驱动，低电平驱动
	while(1)
	{
		Delay500ms();
		P3 |= 0x1C;
		P3 = ~Mot_Ctrl &amp; P3;
		Mot_Ctrl &lt;&lt;= 1;	
		Mot_Ctrl = Mot_Ctrl == 0x20 ? 0x04 : Mot_Ctrl;
	}
}
</code></pre>
</blockquote>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>使用NaiveProxy進行系統代理（教程）</title>
		<link>https://www.luisimon.com/2022/10/08/602/</link>
		
		<dc:creator><![CDATA[Simon]]></dc:creator>
		<pubDate>Sat, 08 Oct 2022 15:58:25 +0000</pubDate>
				<category><![CDATA[技艺分享]]></category>
		<category><![CDATA[VPN]]></category>
		<guid isPermaLink="false">https://www.luisimon.xyz/?p=602</guid>

					<description><![CDATA[最近又即將迎來舉國歡慶的時刻，所以在此寫這篇文章希望藉此文章跟大家一起通過這段美好的時光。 安卓（Androi ... <a title="使用NaiveProxy進行系統代理（教程）" class="read-more" href="https://www.luisimon.com/2022/10/08/602/" aria-label="继续阅读使用NaiveProxy進行系統代理（教程）">阅读更多</a>]]></description>
										<content:encoded><![CDATA[
<p>最近又即將迎來舉國歡慶的時刻，所以在此寫這篇文章希望藉此文章跟大家一起通過這段美好的時光。</p>



<p class="has-medium-font-size"><strong>安卓（Android）客戶端使用方法</strong></p>



<p>1.首先我們需要下載一下兩個軟件</p>



<p><a href="https://www.luisimon.com/goto/rqif" rel="nofollow">naive-plugin</a></p>



<p><a href="https://www.luisimon.com/goto/ojjj" rel="nofollow">SagerNet</a></p>



<p>當然你可以在<a href="https://www.luisimon.com/goto/htkx" rel="nofollow">此頁面</a>找到最新的版本</p>



<p>2.現在開始配置</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="461" height="1024" src="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231633_SagerNet-461x1024.jpg" alt="" class="wp-image-604" srcset="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231633_SagerNet-461x1024.jpg 461w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231633_SagerNet-135x300.jpg 135w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231633_SagerNet-768x1707.jpg 768w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231633_SagerNet-691x1536.jpg 691w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231633_SagerNet-922x2048.jpg 922w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231633_SagerNet-scaled.jpg 1152w" sizes="auto, (max-width: 461px) 100vw, 461px" /></figure>



<p>點擊右上角“＋”號菜單</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="461" height="1024" src="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231732_SagerNet-461x1024.jpg" alt="" class="wp-image-605" srcset="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231732_SagerNet-461x1024.jpg 461w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231732_SagerNet-135x300.jpg 135w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231732_SagerNet-768x1707.jpg 768w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231732_SagerNet-691x1536.jpg 691w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231732_SagerNet-922x2048.jpg 922w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231732_SagerNet-scaled.jpg 1152w" sizes="auto, (max-width: 461px) 100vw, 461px" /></figure>



<p>選擇“手動設定”</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="461" height="1024" src="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231750_SagerNet-461x1024.jpg" alt="" class="wp-image-606" srcset="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231750_SagerNet-461x1024.jpg 461w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231750_SagerNet-135x300.jpg 135w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231750_SagerNet-768x1707.jpg 768w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231750_SagerNet-691x1536.jpg 691w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231750_SagerNet-922x2048.jpg 922w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231750_SagerNet-scaled.jpg 1152w" sizes="auto, (max-width: 461px) 100vw, 461px" /></figure>



<p>選擇“Naive”類型</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="461" height="1024" src="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231934_SagerNet-461x1024.jpg" alt="" class="wp-image-607" srcset="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231934_SagerNet-461x1024.jpg 461w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231934_SagerNet-135x300.jpg 135w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231934_SagerNet-768x1707.jpg 768w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231934_SagerNet-691x1536.jpg 691w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231934_SagerNet-922x2048.jpg 922w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-231934_SagerNet-scaled.jpg 1152w" sizes="auto, (max-width: 461px) 100vw, 461px" /></figure>



<p>填寫伺服器信息</p>



<p>a.填寫【伺服器(地址)】【伺服器端口】【用戶名】【密碼】</p>



<p>b.點擊右上角的“√”保存當前配置信息</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-232213_SagerNet-461x1024.jpg" alt="" class="wp-image-608" width="461" height="1024" srcset="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-232213_SagerNet-461x1024.jpg 461w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-232213_SagerNet-135x300.jpg 135w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-232213_SagerNet-768x1707.jpg 768w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-232213_SagerNet-691x1536.jpg 691w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-232213_SagerNet-922x2048.jpg 922w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-232213_SagerNet-scaled.jpg 1152w" sizes="auto, (max-width: 461px) 100vw, 461px" /></figure>



<p>a.點擊選中剛才保存的配置項</p>



<p>b.點擊右下角的小飛機圖標開啓連接服務器</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="461" height="1024" src="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-232226_SagerNet-461x1024.jpg" alt="" class="wp-image-609" srcset="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-232226_SagerNet-461x1024.jpg 461w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-232226_SagerNet-135x300.jpg 135w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-232226_SagerNet-768x1707.jpg 768w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-232226_SagerNet-691x1536.jpg 691w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-232226_SagerNet-922x2048.jpg 922w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-232226_SagerNet-scaled.jpg 1152w" sizes="auto, (max-width: 461px) 100vw, 461px" /></figure>



<p>看到這樣的界面表示已經配置成功</p>



<p><strong>注意：</strong>如果手機有禁止APP自動啓動功能，請將SagerNet和NaivePlugin設置為自動啓動，否則在連接時可能會提示”<strong>找不到插件</strong>“ 。</p>



<p></p>



<p>接下來我們點擊左上角菜單(<strong>三條杠</strong>)配置一下路由規則</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="461" height="1024" src="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-234409_SagerNet-461x1024.jpg" alt="" class="wp-image-610" srcset="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-234409_SagerNet-461x1024.jpg 461w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-234409_SagerNet-135x300.jpg 135w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-234409_SagerNet-768x1707.jpg 768w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-234409_SagerNet-691x1536.jpg 691w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-234409_SagerNet-922x2048.jpg 922w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-234409_SagerNet-scaled.jpg 1152w" sizes="auto, (max-width: 461px) 100vw, 461px" /></figure>



<p>選擇路由</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="461" height="1024" src="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-234429_SagerNet-461x1024.jpg" alt="" class="wp-image-611" srcset="https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-234429_SagerNet-461x1024.jpg 461w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-234429_SagerNet-135x300.jpg 135w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-234429_SagerNet-768x1707.jpg 768w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-234429_SagerNet-691x1536.jpg 691w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-234429_SagerNet-922x2048.jpg 922w, https://www.luisimon.com/wp-content/uploads/2022/10/Screenshot_20221008-234429_SagerNet-scaled.jpg 1152w" sizes="auto, (max-width: 461px) 100vw, 461px" /></figure>



<p>開啓最底下三個規則，然後我們就可以愉快地去嘗試暢游互聯網啦</p>



<p></p>



<p><strong>後記：這個軟件的版本還在早期，似乎存在一些小bug，相信後期會逐步完善</strong></p>



<p><strong>Windows客戶端使用方法</strong></p>



<p>未完待續&#8230;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>在Log4net日志中添加自定义请求ID</title>
		<link>https://www.luisimon.com/2021/06/17/542/</link>
		
		<dc:creator><![CDATA[Simon]]></dc:creator>
		<pubDate>Thu, 17 Jun 2021 02:35:33 +0000</pubDate>
				<category><![CDATA[技艺分享]]></category>
		<category><![CDATA[編程三兩事]]></category>
		<guid isPermaLink="false">https://www.luisimon.xyz/?p=542</guid>

					<description><![CDATA[Log4net是一个被.net开发者广泛使用的一个写日志类库，但是日常查看web站点的日志时会发现日志内容混乱 ... <a title="在Log4net日志中添加自定义请求ID" class="read-more" href="https://www.luisimon.com/2021/06/17/542/" aria-label="继续阅读在Log4net日志中添加自定义请求ID">阅读更多</a>]]></description>
										<content:encoded><![CDATA[
<p>Log4net是一个被.net开发者广泛使用的一个写日志类库，但是日常查看web站点的日志时会发现日志内容混乱难以区分。往往前一行是A请求线程写的日志，下一行就不知道是哪个请求线程写的了。</p>



<p>面对这个问题，我们为了更好区分开不同请求写的日志，我们利用Log4net的property(属性)功能引入自己定义的[请求ID]，以标记每一个不同的请求。</p>



<p>具体操作如下</p>



<p><strong>①在Web站点右键“添加”-&gt;“新建项”，添加一个“全局应用程序类”，如下图</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="933" height="650" src="https://www.luisimon.com/wp-content/uploads/2021/06/add_global_app_class.png" alt="" class="wp-image-543" srcset="https://www.luisimon.com/wp-content/uploads/2021/06/add_global_app_class.png 933w, https://www.luisimon.com/wp-content/uploads/2021/06/add_global_app_class-300x209.png 300w, https://www.luisimon.com/wp-content/uploads/2021/06/add_global_app_class-768x535.png 768w" sizes="auto, (max-width: 933px) 100vw, 933px" /><figcaption>全局应用程序类</figcaption></figure>



<p><strong>②添加了全局应用程序类(Global.asax)后，我们打开Global.asax添加以下方法代码</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">protected void Application_BeginRequest(object sender, EventArgs e)
    {
        //若已存在Application_BeginRequest,则在Application_BeginRequest中添加以下代码
        //在每一次请求的开始,使用GUID在log4net中定义一个唯一的请求ID
        log4net.GlobalContext.Properties["requestId"] = System.Guid.NewGuid().ToString("N");
    }</pre>



<p><strong>③修改log4net的日志配置(你应该找到你的log4net的配置文件)，将在第二步中定义的ID写到日志当中</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!--在ConversionPattern配置中利用%property{requestId}语法调用我们在log4net中定义的[自定义请求ID]requestId-->

&lt;param name="ConversionPattern" value="%n自定义请求ID:%property{requestId}%n日志时间：%d [%t] %n日志级别：%-5p %n日 志 类：%c [%L] %n%m %n" /></pre>



<p><strong>最后</strong>我们<strong>保存配置</strong>，查看新的日志内容就能看到一行&#8221;<strong>自定义请求ID:</strong>&#8220;后面是一个GUID字符串，只要是<strong>同一个GUID值则表示这些日志是来自同一个请求</strong>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>使用certbot申请let&#8217;s encrypt的免费HTTPS证书（教程）</title>
		<link>https://www.luisimon.com/2021/04/22/487/</link>
		
		<dc:creator><![CDATA[Simon]]></dc:creator>
		<pubDate>Thu, 22 Apr 2021 14:21:31 +0000</pubDate>
				<category><![CDATA[技艺分享]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[SSL证书]]></category>
		<category><![CDATA[免费SSL]]></category>
		<guid isPermaLink="false">https://www.luisimon.xyz/?p=487</guid>

					<description><![CDATA[Let&#8217;s Encrypt由互联网安全研究小组（缩写ISRG）提供服务。主要赞助商包括电子前哨基金 ... <a title="使用certbot申请let&#8217;s encrypt的免费HTTPS证书（教程）" class="read-more" href="https://www.luisimon.com/2021/04/22/487/" aria-label="继续阅读使用certbot申请let&#8217;s encrypt的免费HTTPS证书（教程）">阅读更多</a>]]></description>
										<content:encoded><![CDATA[
<p><a href="https://www.luisimon.com/goto/tosl" rel="nofollow" data-type="URL" data-id="https://letsencrypt.org/">Let&#8217;s Encrypt</a>由互联网安全研究小组（缩写ISRG）提供服务。主要赞助商包括电子前哨基金会、Mozilla基金会、Akamai以及思科。</p>



<p><strong>环境: CentOS 7</strong></p>



<p>下面介绍通过DNS TXT记录认证方式申请证书 , 我们假设给 www.example.com 这个域名申请证书</p>



<p>首先我们到 <a href="https://www.luisimon.com/goto/smuy" rel="nofollow">https://certbot.eff.org</a> 安装通过网站指引安装certbot工具</p>



<p><strong>1.执行命令<em> (在CentOS上)</em></strong></p>



<pre class="wp-block-preformatted">#直接申请SSL证书 , 不需要部署web站点服务<br>certbot --manual --preferred-challenges dns certonly</pre>



<p><strong>2.按照命令行提示输入需要申请证书的域名(如: www.example.com) <em>(在CentOS上)</em></strong></p>



<p><strong>3.按照命令行提示在DNS (如:<a href="https://www.luisimon.com/goto/ceax" rel="nofollow">godaddy</a>等域名服务商) 中添加对应的TXT记录(如下图所示) <em>(在CentOS上)</em></strong></p>



<p>当然，其他的域名商操作也一样（如：阿里云/腾讯云/Cloudflare等）</p>



<figure class="wp-block-image size-large is-resized is-style-default"><img loading="lazy" decoding="async" width="885" height="312" src="https://www.luisimon.com/wp-content/uploads/2021/04/image.png" alt="" class="wp-image-488" style="width:770px;height:271px" srcset="https://www.luisimon.com/wp-content/uploads/2021/04/image.png 885w, https://www.luisimon.com/wp-content/uploads/2021/04/image-300x106.png 300w, https://www.luisimon.com/wp-content/uploads/2021/04/image-768x271.png 768w" sizes="auto, (max-width: 885px) 100vw, 885px" /></figure>



<p>保存后 , 等待一分钟左右 , 主要是等待DNS更新</p>



<p><em>接下来我们使用以下命令查询TXT是否已经生效(不同地区或DNS服务器各有差异)</em></p>



<pre class="wp-block-preformatted">#在Windows中使用nslookup命令
nslookup -q=TXT www.example.com 
</pre>



<p><strong>4.接下来按命令行提示操作(按任意键继续) <em>(在CentOS上)</em></strong></p>



<p><strong>5.如无错误 , 即可顺利获得一个有效期为3个月(180天)的https证书</strong></p>



<p>按照提示信息里说明的证书存放路径 , 可以看到以下几个证书文件</p>



<p class="has-normal-font-size"><strong>一般是位于 /etc/letsencrypt/live/www.example.com 目录</strong></p>



<pre class="wp-block-preformatted">cert.pem
chain.pem
<strong>fullchain.pem #一般用这个
privkey.pem   #一般用这个</strong></pre>



<h1 class="wp-block-heading">letsencrypt 有什么限制</h1>



<h3 class="wp-block-heading">标准限制</h3>



<ul class="wp-block-list">
<li>同一个顶级域名下的二级域名，一周做多申请 20 个</li>



<li>一个域名一周最多申请 5 次</li>



<li>1 小时最多允许失败 5 次</li>



<li>请求频率需要小于 20 次/s</li>



<li>一个 ip 3 小时内最多创建 10 个账户</li>



<li>一个账户最多同时存在 300 个 pending 的审核</li>
</ul>



<h3 class="wp-block-heading">测试模式限制</h3>



<p>在 certbot 命令后加上 <code>--staging</code> 参数，限制更松一些，但不是正式证书</p>



<ul class="wp-block-list">
<li>同一个顶级域名下的二级域名，一周做多申请 30000 个</li>



<li>一个域名一周最多申请 30000 次</li>



<li>1 小时最多允许失败 60 次</li>



<li>一个 ip 3小时内最多创建 50 个账户</li>
</ul>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>.Net(C#) DateTime的ToString方法格式化(Format)</title>
		<link>https://www.luisimon.com/2021/04/02/468/</link>
		
		<dc:creator><![CDATA[Alan]]></dc:creator>
		<pubDate>Fri, 02 Apr 2021 07:07:25 +0000</pubDate>
				<category><![CDATA[編程三兩事]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[C#]]></category>
		<guid isPermaLink="false">https://www.luisimon.xyz/?p=468</guid>

					<description><![CDATA[在C#中调用时间转字符串格式的ToString(&#8220;format&#8221;)函数，以下是格式说明 ... <a title=".Net(C#) DateTime的ToString方法格式化(Format)" class="read-more" href="https://www.luisimon.com/2021/04/02/468/" aria-label="继续阅读.Net(C#) DateTime的ToString方法格式化(Format)">阅读更多</a>]]></description>
										<content:encoded><![CDATA[
<p>在C#中调用时间转字符串格式的ToString(&#8220;format&#8221;)函数，以下是格式说明</p>



<h2 class="wp-block-heading">年份部分</h2>



<ul class="wp-block-list">
<li>1、<strong>yyyy</strong> => 完整的年份数字。（例如：2020、2021）</li>



<li>2、<strong>yyy</strong> => 完整的年份数字，效果同“yyyy”。</li>



<li>3、<strong>yy</strong> => 年份后两位数字。（例如：20、21）</li>



<li>4、<strong>y</strong> => 年份后两位数字，效果同“yy”</li>
</ul>



<h2 class="wp-block-heading">月份部分</h2>



<ul class="wp-block-list">
<li>1、<strong>MMMM</strong> => 月份的完整英文。（例如：August）</li>



<li>2、<strong>MMM</strong> => 月份的英文缩写。（例如：Aug）</li>



<li>3、<strong>MM</strong> => 月份前位补零数字。（例如：01、12）</li>



<li>4、<strong>M</strong> => 月份不补零数字。（例如：1，12）</li>
</ul>



<h2 class="wp-block-heading">日期部分</h2>



<ul class="wp-block-list">
<li>1、<strong>dddd</strong> => 星期部分的完整英文。（例如：Sunday）</li>



<li>2、<strong>ddd</strong> => 星期部分的英文缩写。（例如：Sun）</li>



<li>3、<strong>dd</strong> => 日期前位补零数字。（例如：01）</li>



<li>4、<strong>d </strong>=> 日期不补零数字。（例如：1）</li>
</ul>



<h2 class="wp-block-heading">小时部分</h2>



<ul class="wp-block-list">
<li>1、<strong>HH</strong> => 24小时制，前位补零。（例如：03、23）</li>



<li>2、<strong>H</strong> => 24小时制，不补零。（例如：3、23）</li>



<li>3、<strong>hh</strong> => 12小时制，前位补零。（例如：03，11）</li>



<li>4、<strong>h</strong> => 12小时制，不补零。（例如：3，11）</li>



<li>5、<strong>tt</strong> => 英文上下午标识。（例如：AM、PM）</li>



<li>6、<strong>t</strong> => 英文上下午标识简写。（例如：A、P）</li>
</ul>



<h2 class="wp-block-heading">分钟部分</h2>



<ul class="wp-block-list">
<li>1、<strong>mm</strong> => 有前位补零的分钟数字。（例如：09、20）</li>



<li>2、<strong>m</strong> => 无补零的分钟数字。（例如：9、20）</li>
</ul>



<h2 class="wp-block-heading">秒部分</h2>



<ul class="wp-block-list">
<li>1、<strong>ss</strong> => 有前位补零的秒数字。（例如：9、21）</li>



<li>2、<strong>s</strong> => 有前位补零的秒数字。（例如：9、21）</li>
</ul>



<h2 class="wp-block-heading">毫秒部分</h2>



<ul class="wp-block-list">
<li>1、<strong>fffffff</strong>  => 秒数的小数部分最高七位有效数。</li>



<li>2、<strong>ffffff</strong> => 秒数的小数部分最高六位有效数。</li>



<li>3、<strong>fffff</strong> => 秒数的小数部分最高五位有效数。</li>



<li>4、<strong>ffff</strong> => 秒数的小数部分最高四位有效数。</li>



<li>5、<strong>fff</strong> => 秒数的小数部分最高三位有效数（常用）。</li>



<li>6、<strong>ff</strong> => 秒数的小数部分最高二位有效数。</li>



<li>7、<strong>f</strong> => 秒数的小数部分最高一位有效数。</li>
</ul>



<h2 class="wp-block-heading">其他</h2>



<ul class="wp-block-list">
<li>1、<strong>zzz</strong> => 表示时区信息，带偏移符号以及有前位补零的小时和分钟位。（例如：+08:00）</li>



<li>2、<strong>zz</strong> => 表示时区信息，带偏移符号以及有前位补零的小时位。（例如：+08）</li>



<li>3、<strong>z</strong> => 表示时区信息，带偏移符号以及无补零的小时位。（例如：+8）</li>



<li>4、<strong>K</strong> => 与“zzz”等价</li>
</ul>



<p>参考：<a rel="noreferrer noopener" href="https://www.luisimon.com/goto/n0lv" rel="nofollow" target="_blank">微软</a>、<a href="https://www.luisimon.com/goto/jjpw" target="_blank" rel="nofollow noreferrer noopener">C<strong>♯</strong> Corner（C#角落）</a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
