-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
289 lines (139 loc) · 47.3 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>菜鸟入门github上传本地项目</title>
<link href="/2020/02/08/github/githubCommit/"/>
<url>/2020/02/08/github/githubCommit/</url>
<content type="html"><![CDATA[<p>首先通过github管理你的项目的前提是你要有一个github账户并且你的电脑或者服务器已经安装了git<br>以下按提交资源到github的先后顺序介绍几个git命令</p><a id="more"></a><p>1.首先需要初始化git文件</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git init</span><br></pre></td></tr></table></figure><p>执行成功后,你的项目目录下会生成一个.git的隐藏文件。</p><p>2.然后可以通过add命令添加新增文件到本地的github缓存</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git add . //这里使用. 代表所有文件,当然也可以添加特定的单个或多个文件</span><br></pre></td></tr></table></figure><p>3.对比本地资源的提交差异</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git status</span><br></pre></td></tr></table></figure><p>该命令会把你本地工作区和暂存区的版本进行比较,查看当前的状态。我下面的状态是已经把所有文件加入到了暂存区中,但是还没有提交到本地历史区。</p><p>4.提交差异</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git commit <span class="literal">-m</span> <span class="string">"这里是注释。。。"</span></span><br></pre></td></tr></table></figure><p>该命令会把本地暂存区中的文件提交到本地历史区,注意只有在本地历史区中的内容才能提交到github。执行该命令后,我们所有的文件都只是在本地。没有github任何关系。</p><p>5.提交本地差异到github的仓库暂存区</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git remote add github项目URL</span><br></pre></td></tr></table></figure><p>6.先同步github文件</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git pull -<span class="literal">-rebase</span> origin master</span><br></pre></td></tr></table></figure><p>如果对比commit的文件与服务器文件有差异,这条命令会先将差异打包,之后同步,最后将差异合并。</p><p>7.提交之前暂缓区的文件到github</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git push <span class="literal">-u</span> origin master</span><br></pre></td></tr></table></figure><p>这条命令执行完之后,就可以在github上看到提交或者改动的代码了</p>]]></content>
<categories>
<category> github </category>
</categories>
<tags>
<tag> github </tag>
<tag> 代码库 </tag>
</tags>
</entry>
<entry>
<title>搭建自己的嵌入式博客服务器(四)hexo安装及部署到GitHub</title>
<link href="/2020/02/06/embedded/blogServer/blogServer4/"/>
<url>/2020/02/06/embedded/blogServer/blogServer4/</url>
<content type="html"><![CDATA[<p>到了博客搭建的最后一个阶段,使用hexo框架搭建完全静态博客站点,这里还简单介绍下将博客资源部署到github上的方法。</p><a id="more"></a><h1 id="一,hexo的安装使用"><a href="#一,hexo的安装使用" class="headerlink" title="一,hexo的安装使用"></a>一,hexo的安装使用</h1><p>1.安装Hexo</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install <span class="literal">-g</span> hexo<span class="literal">-cli</span></span><br></pre></td></tr></table></figure><p>之后使用hexo -v查看一下版本,版本显示成功则安装成功。</p><p>2.使用<br>首先要初始化整个模板</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo init myblog</span><br></pre></td></tr></table></figure><p>myblog是你的的博客文件夹的名称,根据自己的喜好设置 </p><p>更新npm</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install</span><br></pre></td></tr></table></figure><p>这里简单介绍下初始化好的博客文件夹下的几个目录</p><ul><li><p>node_modules: 相关的依赖不常用 public:存放生成的页面</p></li><li><p>scaffolds:生成文章的一些模板,比如使用hexo new “xx”,xx.md<br>的默认内容可以通过修改模板来改变 </p></li><li><p>source:用来存放你的文章就是 xx.md文件</p></li><li><p>themes:存放主题</p></li></ul><p>常用命令接介绍</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">hexo clean //清楚原有的静态缓存</span><br><span class="line">hexo generate //重新生成所有的静态网页</span><br><span class="line">hexo deploy //部署到相关的平台 例如 github</span><br><span class="line">hexo new <span class="string">"xx"</span> //生成xx.md,新建文章</span><br></pre></td></tr></table></figure><h1 id="二,部署到GitHub(可以跳过,部署之后方便备份)"><a href="#二,部署到GitHub(可以跳过,部署之后方便备份)" class="headerlink" title="二,部署到GitHub(可以跳过,部署之后方便备份)"></a>二,部署到GitHub(可以跳过,部署之后方便备份)</h1><h2 id="1,安装github(linux)"><a href="#1,安装github(linux)" class="headerlink" title="1,安装github(linux)"></a>1,安装github(linux)</h2><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt<span class="literal">-get</span> install git</span><br></pre></td></tr></table></figure><p> 用git –version 来查看一下版本,显示版本代表安装成功。</p><h2 id="2,-部署博客到GitHub"><a href="#2,-部署博客到GitHub" class="headerlink" title="2, 部署博客到GitHub"></a>2, 部署博客到GitHub</h2><p>1.新建仓库<br>登录GitHub.com,点击New repository,新建仓库<br>创建一个和你用户名相同的仓库,仓库名称为 “用户名+.github.io”,这样你的博客才能通过GitHub page访问,GitHub page是GitHub新建项目后为项目建立的私人网站站点,通过 用户名+.github.io 访问时,会显示主目录下的index.html</p><p>之后create repository,创建完成。</p><p>2.生成SSH添加到GitHub</p><p>生成ssh key</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git config -<span class="literal">-global</span> user.name <span class="string">"用户名"</span></span><br><span class="line">git config -<span class="literal">-global</span> user.email <span class="string">"邮件地址"</span></span><br></pre></td></tr></table></figure><p>可以用以下两条,检查一下你有没有输对</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git config user.name</span><br><span class="line">git config user.email</span><br></pre></td></tr></table></figure><p>确认输入无误后,然后创建SSH</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh<span class="literal">-keygen</span> <span class="literal">-t</span> rsa <span class="literal">-C</span> <span class="string">"youremail"</span></span><br></pre></td></tr></table></figure><p>一路回车,过程中会提示输入一些东西,使用默认配置即可,直接回车。</p><p>生成的ssh目录下回有id_rsa私钥和id_rsa.pub公钥,需要把这个公钥放在GitHub上,这样当你链接GitHub自己的账户时,公钥私钥匹配成功才能通过git上传你的文件到GitHub上。</p><p>在setting中,找到SSH keys的设置选项,点击New SSH key,把你的id_rsa.pub里面的信息复制进去。</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh <span class="literal">-T</span> [email protected]</span><br></pre></td></tr></table></figure><p>提示(You’ve successfully authenticated, but GitHub does not provide shell access),则表示测试成功。</p><p>3.将hexo部署到GitHub</p><p>打开hexo的根目录配置文件 _config.yml,添加以下内容</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">deploy:</span><br><span class="line"> type: git</span><br><span class="line"> repo: https://github.com/YourgithubName/YourgithubName.github.io.git</span><br><span class="line"> branch: master</span><br></pre></td></tr></table></figure><p>要想提交资源到github还需要安装deploy-git ,也就是部署的命令,这样你才能用命令部署到GitHub。</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -<span class="literal">-save</span> hexo<span class="literal">-deployer</span><span class="literal">-git</span></span><br></pre></td></tr></table></figure><p>之后就可以使用hexo deploy /hexo d提交了</p><p>第一次提时,可能要你输入username和password。</p><p>提交成功后可以通过github查看是否提交成功,确认成功后可以通过用户名+.github.io查看你的博客了(注意这里是https)</p>]]></content>
<categories>
<category> 嵌入式 </category>
<category> 博客服务 </category>
</categories>
<tags>
<tag> Hexo </tag>
<tag> 嵌入式 </tag>
<tag> 博客服务 </tag>
</tags>
</entry>
<entry>
<title>手机语音助手控制自己开发的物联网设备方法</title>
<link href="/2020/02/06/embedded/VoiceAssistant/VoiceAssistant/"/>
<url>/2020/02/06/embedded/VoiceAssistant/VoiceAssistant/</url>
<content type="html"><![CDATA[<p>市面上可以买到的物联网设备多种多样,而现有的提供商小米,百度,天猫等基本都是各玩各的,没有同意的设备接入控制的标准协议。所以开发者如果自行开发了一款设备没有同意的标准协议可以遵循,除非是调用厂商提供提供的SDK(实际还是按照他们的自定义协议实现)。那么如何简单实现将用siri或者小爱同学等语音助手控制自己的设备呢?下面总结下目前我了解的方法。</p><a id="more"></a><p>首先分两种情况一个是Siri,另外是小爱,小度等国内几个大厂商。</p><h2 id="一,Siri"><a href="#一,Siri" class="headerlink" title="一,Siri"></a>一,Siri</h2><p>苹果系统完全可以借助一款APP“捷径”,这个APP是可以自定义语音指令,然后执行特定的脚本的,这就非常方便了。</p><ol><li>比如用的比较多的物联网终端控制器ESP8266,源代码提供通过访问ESP8266的IP加引脚号控制引脚高低电平的方法。例如新建捷径指令“打开灯”,捷径指令执行访问你的ESP8266的ip加引脚号的URL就可以实现控制某个引脚的高低电平,相当于可以控制某个开关信号了,具体收到这个开关信号之后的实现逻辑你就可以自定义实现了。</li><li>另外的场景(控制板非ESP8266),这个也是比较常用的到的场景。目前我的解决办法是在自己家搭建一个运行Linux的服务端,开机ssh服务,然后通过捷径,运行脚本登录SSH的方式,直接控制你的Linux服务端执行某个特定的脚本,脚本的内容就可以是具体的控制你的某个设备了。<br><img src="https://img-blog.csdnimg.cn/20200206111754460.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjgxNjAx,size_8,color_FFFFFF,t_70" alt="图片链接"><br>另外的话第二种方法相比第一种还有一个好处就是,你可以为你的服务端绑定域名,这样的话就可以实现远程ssh,这样不必在同一网络内,在任何地方你都可以通过siri控制你的设备了。</li></ol><h2 id="二,小爱小度等"><a href="#二,小爱小度等" class="headerlink" title="二,小爱小度等"></a>二,小爱小度等</h2><p>除了Siri之外,现在用的比较多的就是小爱同学了,想想你自己可以直接通过家里的小爱音箱控制自己开发的设备是不是也不错,这里可以关注下“点灯科技”。简单介绍下这个平台集成了目前使用广泛的语音平台,提供不同厂家的协议SDK,跳过了直接使用原厂商SDK的种种限制,比如接入小爱同学需要你有自己的服务器外,还需要有自己的APP,账号体系等等。</p><p>只需要将对应平台的SDK下载到自己的设备,设备本身实现对应的回调函数即可实现语音控制功能,不过从官网看目前该平台提供的免费版仅仅支持控制灯,传感器和插座开关,具体的实现方案点灯的官网也给出了较为详细的步骤。</p>]]></content>
<categories>
<category> 嵌入式 </category>
<category> 语音助手 </category>
</categories>
<tags>
<tag> 语音助手 </tag>
<tag> Siri </tag>
</tags>
</entry>
<entry>
<title>记ST_LINK与STM32的连接调试</title>
<link href="/2020/01/31/embedded/stm32/embedded-stm32-stlink/"/>
<url>/2020/01/31/embedded/stm32/embedded-stm32-stlink/</url>
<content type="html"><![CDATA[<p>由于先前的32板子不能但不调试,就是不支持JTAG/SWD,平时测试程序只能是编译没问题了就直接下载到板子上,如果想看运行过程中的变量的值只能是靠自己的推测,或者一些自己想出来的土办法(比如用串口打印或者led显示)。</p><a id="more"></a><p>于是在某宝30多块入手mini32板子加st-link调试器。如图</p><p><img src="https://img-blog.csdn.net/20180809153918724?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjgxNjAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt="图片"></p><p>客服不是很专业,给了一些资料就完事了,再问一些问题,一直支支支吾吾的答不上来。只能是自己看资料解决了。</p><p>下面将连接流程介绍下:</p><p>首先保证连线的准确,这是重中之重,一定要检查清楚。</p><p>其次安装客服给的ST-link v2驱动程序,安装过程中的选项默认就好包括路径。</p><p>安装完成后插上STLINK打开设备管理器就可以看到STLINK的设备驱动了。</p><p><img src="https://img-blog.csdn.net/20180809154034819?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjgxNjAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt="图片"></p><p>现在并不能打开MDK调试,还有另外一步,安装STM32 ST-LINK Utility这里面包括了WIN10 的STlink的驱动解决方案,同样安装过程中的选项默认就好包括路径。</p><p>这时如果没有什么大问题就可以用ST-LINK Utility下载可执行文件了,如果可以固件升级却出现这这样的提示:</p><p><img src="https://img-blog.csdn.net/2018080915375675?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjgxNjAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt="图片"></p><p>检查插线和主板,这表示ST-LINK连接没问题,问题是找不到主板。</p><p>ST-LINK Utility运行无误后,表明你的硬件没有一点问题,现在就可以打开MDK(keil)了,只需简单几步:</p><p>1:打开项目配置选项卡,点击Debug,配置仿真器为ST-LINK DEBUG,点击setting</p><p><img src="https://img-blog.csdn.net/20180809152550944?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjgxNjAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt="图片"></p><p>正常情况下:</p><p><img src="https://img-blog.csdn.net/20180809152730611?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjgxNjAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt="图片"></p><p>SW或者选择JATG,右侧SW/JATG Devise 下回出现id号。。。这种情况下直接点解确定</p><p>还有可能会是这种情况:</p><p><img src="https://img-blog.csdn.net/20180809153001133?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjgxNjAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt="图片"><br>这表示ST-LINK连接无误,而查找不到目标板,请检查插线和主板。</p><p>正常后点击Utilities选项卡:</p><p><img src="https://img-blog.csdn.net/20180809153219801?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjgxNjAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt="图片"></p><p>同样设置ST-LINK DEBUG 点击Setting</p><p><img src="https://img-blog.csdn.net/20180809153307751?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjgxNjAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt="图片"></p><p>Download Function 选择第一项,其余默认点击下方ADD</p><p><img src="https://img-blog.csdn.net/20180809153422171?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjgxNjAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt="图片"></p><p>选择你的开发板型号。</p><p>至此,ST-link调试可以在MDK下下载,单步执行。</p>]]></content>
<categories>
<category> 嵌入式 </category>
<category> stm32 </category>
</categories>
<tags>
<tag> stm32 </tag>
<tag> 单片机 </tag>
<tag> 调试器 </tag>
</tags>
</entry>
<entry>
<title>stm32硬件I2C实现问题</title>
<link href="/2020/01/31/embedded/stm32/embedded-stm32-hi2c/"/>
<url>/2020/01/31/embedded/stm32/embedded-stm32-hi2c/</url>
<content type="html"><![CDATA[<p>虽然软件可实现I2C读取三轴传感器数据,但I2C作为一种重要的通信协议是一定要搞清楚问题所在的,SO继续研究之前的问题。(网上传言STM32硬件I2C有问题,但仍然有人实现出来)<br>再次启动程序,依旧是停在原来的位置</p><a id="more"></a><p><img src="https://img-blog.csdn.net/20180814174512882?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjgxNjAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt="这是一个图片"></p><p>等待EV6,网上搜索相关问题好多人都停在了等待EV5上。分析EV5等待问题,主机发送起始信号,没能接受从设备发送的应答,</p><p>或者可能都没有发送。此问题应该是接线或IIC初始化代码的问题。</p><p>而我此时停在等待EV6,说明已检测到该设备。换句话说从设备已经知道了主设备的存在。却在主设备发送设备地址之后,接受不到从设备的应答信号,自己分析有两种可能,一是设备地址错误,从设备接受到不是自身的设备而地址自然不会应答。二是从设备已应答,而并接受到。在设备地址正确的前提下(前面已经通过例程验证过,前面的文章),思索第二种问题。</p><p>网上类似问题网友回应也是繁多,如RCC时钟初始化的问题,检查代码RCC_APB1Periph_I2C1,RCC_APB2Periph_GPIOB均已使能。又如可能i2c1默认引脚被复用,或该引脚没接上拉电阻,而不能开漏输出。将默认PIN6.PIN7重映射后依旧老样子排除该问题。</p><p>(重映射函数</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GPIO_PinRemapConfig(u32 GPIO_Remap, FunctionalState NewState)</span><br></pre></td></tr></table></figure><p>)</p><p>再一次想到时钟问题,将IIC初始化结构体中的速率该低</p><p>原来是400000,也不行</p><p>直到在某论坛看到据说可以直接用的程序,打开发现代码并无差别,唯一不同的是,RCC初始化,其代码在主函数开始就初始化了所有的需要用到的时钟包括</p><p>,只是初始化位置不同。。。。</p><p>终于豁然开朗。</p><p>数据读取准确无误。</p><p>之后又将初始化程序恢复到原位置发现,程序仍可正确运行,不知何解。</p><p>尝试恢复速率发现,恢复成400000后不能读取,程序停滞在等待EV6</p><p>2000000等待EV5,1000000等待EV5</p><p>只能还设为100000,可以正常工作。</p><p>至此可确定STM32硬件I2C真的有问题!!!!</p><p>程序只能在10000输出,仅供参考</p><p>.h</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">ifndef</span> __I2C_H__</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> __I2C_H__</span></span><br><span class="line"> </span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"stm32f10x.h"</span></span></span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">I2C_GPIO_Config</span><span class="params">(<span class="keyword">void</span>)</span></span>;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">I2C1_Init</span><span class="params">(<span class="keyword">void</span>)</span></span>;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">I2C1_Write</span><span class="params">(u8 addr, u8 data)</span></span>;</span><br><span class="line"><span class="function">u8 <span class="title">I2C1_Read</span><span class="params">(u8 nAddr)</span></span>;</span><br><span class="line"><span class="meta">#<span class="meta-keyword">endif</span></span></span><br></pre></td></tr></table></figure><p>.c</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"tb_delay.h"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"i2c.h"</span></span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">I2C_GPIO_Config</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line">GPIO_InitTypeDef GPIO_InitStructure;</span><br><span class="line">RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);</span><br><span class="line">GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;</span><br><span class="line">GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;</span><br><span class="line">GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;</span><br><span class="line">GPIO_Init(GPIOB, &GPIO_InitStructure);</span><br><span class="line">}</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">I2C1_Init</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line">I2C_InitTypeDef I2C_InitStructure;</span><br><span class="line">RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);</span><br><span class="line">I2C_DeInit(I2C1);</span><br><span class="line">I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;</span><br><span class="line">I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;</span><br><span class="line">I2C_InitStructure.I2C_OwnAddress1 = <span class="number">0x77</span>;</span><br><span class="line">I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;</span><br><span class="line">I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;</span><br><span class="line">I2C_InitStructure.I2C_ClockSpeed = <span class="number">10000</span>;</span><br><span class="line">I2C_Init(I2C1, &I2C_InitStructure);</span><br><span class="line">I2C_Cmd(I2C1, ENABLE);</span><br><span class="line">}</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">I2C1_Write</span><span class="params">(u8 addr, u8 data)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line">I2C_AcknowledgeConfig(I2C1,ENABLE); </span><br><span class="line">I2C_GenerateSTART(I2C1,ENABLE); </span><br><span class="line"><span class="keyword">while</span>(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)){;}<span class="comment">//EV5</span></span><br><span class="line">I2C_Send7bitAddress(I2C1,<span class="number">0x3a</span>,I2C_Direction_Transmitter); </span><br><span class="line"><span class="keyword">while</span>(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)){;} <span class="comment">//EV6</span></span><br><span class="line">I2C_SendData(I2C1,addr); </span><br><span class="line"><span class="keyword">while</span>(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)){;} <span class="comment">//EV8</span></span><br><span class="line">I2C_SendData(I2C1,data);</span><br><span class="line"><span class="keyword">while</span>(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)){;} </span><br><span class="line">I2C_GenerateSTOP(I2C1,ENABLE); </span><br><span class="line">}</span><br><span class="line"> </span><br><span class="line"><span class="function">u8 <span class="title">I2C1_Read</span><span class="params">(u8 nAddr)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line">I2C_AcknowledgeConfig(I2C1,ENABLE); <span class="comment">//????</span></span><br><span class="line">I2C_GenerateSTART(I2C1,ENABLE); <span class="comment">//???????</span></span><br><span class="line"><span class="keyword">while</span>(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)){;} <span class="comment">//??EV5</span></span><br><span class="line">I2C_Send7bitAddress(I2C1,<span class="number">0x3a</span>,I2C_Direction_Transmitter); <span class="comment">//????????</span></span><br><span class="line"><span class="keyword">while</span>(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)){;}<span class="comment">//??EV6</span></span><br><span class="line">I2C_SendData(I2C1,nAddr);<span class="comment">//?????</span></span><br><span class="line"><span class="keyword">while</span>(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)){;} <span class="comment">//??EV8</span></span><br><span class="line"> </span><br><span class="line">I2C_GenerateSTART(I2C1,ENABLE); <span class="comment">//???????</span></span><br><span class="line"><span class="keyword">while</span>(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)){;} <span class="comment">//??EV5</span></span><br><span class="line">I2C_Send7bitAddress(I2C1,<span class="number">0x3a</span>,I2C_Direction_Receiver); <span class="comment">//???????</span></span><br><span class="line"><span class="keyword">while</span>(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)){;} <span class="comment">//??EV6</span></span><br><span class="line">I2C_AcknowledgeConfig(I2C1,DISABLE); <span class="comment">//??????</span></span><br><span class="line">I2C_GenerateSTOP(I2C1,ENABLE); <span class="comment">//???????</span></span><br><span class="line"><span class="keyword">while</span>(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)){;} <span class="comment">//??EV7</span></span><br><span class="line"><span class="keyword">return</span> I2C_ReceiveData(I2C1); <span class="comment">//???????</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<categories>
<category> 嵌入式 </category>
<category> stm32 </category>
</categories>
<tags>
<tag> stm32 </tag>
<tag> I2C </tag>
<tag> 单片机 </tag>
</tags>
</entry>
<entry>
<title>人脸三维建模软件</title>
<link href="/2020/01/31/3D/3Dmodeling/"/>
<url>/2020/01/31/3D/3Dmodeling/</url>
<content type="html"><![CDATA[<p>最近接触了三维打印机,学了两天3Dmax建模,打印了一个简单的手机壳,形状倒是很漂亮不过还是没达到理想的效果。</p><a id="more"></a><p>设想如果打印机能把我的人脸模型打印出来岂不是更完美了,毕竟这都是电影里才有的画面,真要让我完成了,哈哈!!!于是想方设法开始找人脸三维建模软件,找了好多软件有手机APP,也有PC程序。这里简单介绍几个比较好用的软件。</p><p>先从简单的开始吧,首先是一个APP,Qlone.可以很方便的直接用手机围着建模物体转几圈就能把模型建出来,而且自己感觉模型的相似度很高。不过前提是你要把物体放在官方提供的二维码上面,软件才能识别出来物体进行建模。同样一个更大的缺点是如果想要导出模型的或需要付费。。。这对我简直是致命的缺点,我也是因此直接卸载。所以不多说了。</p><p><img src="https://img-blog.csdnimg.cn/20190408201714823.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjgxNjAx,size_16,color_FFFFFF,t_70" alt="这是一个图片"><br>第二个是PC端软件,3DSOM Pro v5,软件的官网对软件有着高度的评价,官网也给处理示例或模型。需要对准一个物体进行360的无死角的拍照,最后将所有照片上传到该软件进行建模。按照步骤一步步来,我拍摄了30多张照片,最后软件只识别13张,其余的都作废了,上传完后还要对所有的图片逐个进行边缘的分离,人工处理(很累,费眼神)。经过大约20-30分钟的等待后模型就能建出来了,过程很是曲折,不过模型确实是有点意思,当然不是很完美。3DSOM的建模方法让我想到了科幻电影特效制作过程中,在整个绿色幕布下拍摄建模的方法,感觉很是类似。</p><p>该软件的中文资料较少,<a href="https://blog.csdn.net/qq_41281601/article/details/89107267" target="_blank" rel="noopener">简单使用步骤在这</a></p><p>这里是官方14天试用版的<a href="http://www.3dsom.com/free-trial/" target="_blank" rel="noopener">下载地址</a></p><p>第三个是我最后决定用来人脸建模的软件FaceGen Modeller,在人脸建模方面可以说很好用了,估计在这也是网上能找到的最好用的了吧。这个软件可以直接随机生成人脸也可以根据你的照片生成真人的人脸模型,人脸模型的生成需要人脸的三张照片,正面和左右两面,然后按照软件示例中的人脸对人脸的特征点进行定位,普通电脑经过10左右就能生成人脸模型了。最后出来的模型和真人没什么区别,反正熟人一看就知道是你。人脸建模方面,强烈推荐使用。使用步骤简单不做详细的阐述了。<br><img src="https://img-blog.csdnimg.cn/20190408210706800.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMjgxNjAx,size_16,color_FFFFFF,t_70" alt="这是一个图片"></p>]]></content>
<categories>
<category> 3D </category>
</categories>
<tags>
<tag> 3D打印 </tag>
<tag> 建模 </tag>
</tags>
</entry>
<entry>
<title>博客搬家大更新啦</title>
<link href="/2020/01/31/top/top/"/>
<url>/2020/01/31/top/top/</url>
<content type="html"><![CDATA[]]></content>
</entry>
<entry>
<title>搭建自己的嵌入式博客服务器(三)内网穿透</title>
<link href="/2020/01/31/embedded/blogServer/blogServer3/"/>
<url>/2020/01/31/embedded/blogServer/blogServer3/</url>
<content type="html"><![CDATA[<p>由于自己的嵌入式设备,是通过自己家的路由器连接接入网络的,而黑心的运营商在我们每次上网时分配给我们的公网IP是变动的。为了实现外网设备访问我们的内网设备,我们不得不使用一个内网穿透穿透工具打通两个设备之间的通信链路。<br>而现有的内网穿透工具参差不齐,下面我简单介绍下我试用的三个,都是免费的。</p><a id="more"></a><ol><li>花生壳<br>优点:自定义域名,不变动<br>缺点:没有使用ARM Ubuntu的程序版本</li></ol><p>借鉴前人经验,我首先使用的是众所周知的花生壳做为内网穿透工具。可以在花生壳官方域名前加自定义域名而且域名不会变动。但是没有使用我的环境的版本,官网倒是有树莓派的版本和操作文档,尝试使用树莓派的版本在我的环境下验证失败。不过官方的工单服务和客服回复的倒是挺及时的,使用树莓派的同学倒是可以尝试使用下花生壳。<a href="https://hsk.oray.com" target="_blank" rel="noopener">官网链接</a></p><ol start="2"><li>Sunny-Ngrok<br>优点:自定义域名,不变动。支持多平台<br>缺点:免费服务器经常崩溃</li></ol><p>这个也是前一段时间一直在使用的工具,官方的文档给的很详细,详细到提供开关服务的脚本和自启动,操作也比较简便,不过由于服务器经常崩溃,导致不能正常使用(免费厂崩溃),不过听说付费的服务器也是很稳定的。不差钱的同学可以试下。<a href="http://www.ngrok.cc/" target="_blank" rel="noopener">官网链接</a></p><ol start="3"><li>natfrp<br>优点:国外服务器服务稳定,支持多平台<br>缺点:不支持提供域名,需要自己注册域名</li></ol><p>这个是最近我才使用的,官方的操作也比较简便,不过官方提供的程序没有给开机自启动和服务开关的脚本,需要自己编写。还有就是需要自己买个域名,在域名解析服务加上natfrp上你注册的服务器的域名。这个使用了两天比较稳定,是我目前正在使用的。<a href="https://www.natfrp.com/" target="_blank" rel="noopener">官网链接</a></p>]]></content>
<categories>
<category> 嵌入式 </category>
<category> 博客服务 </category>
</categories>
<tags>
<tag> Hexo </tag>
<tag> 嵌入式 </tag>
<tag> 博客服务 </tag>
</tags>
</entry>
<entry>
<title>搭建自己的嵌入式博客服务器(二)环境搭建</title>
<link href="/2020/01/31/embedded/blogServer/blogServer2/"/>
<url>/2020/01/31/embedded/blogServer/blogServer2/</url>
<content type="html"><![CDATA[<p>本篇简单介绍几个环境的搭建,包括node,Apache, hexo</p><a id="more"></a><h2 id="node-js和npm"><a href="#node-js和npm" class="headerlink" title="node.js和npm"></a>node.js和npm</h2><p>这里使用的是Ubantu操作系统,其他Linux系统同理, (npm是node.js的包管理工具,随同node.js一同下载)</p><ol><li>安装curl.<figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo apt<span class="literal">-get</span> install curl </span><br><span class="line">curl <span class="literal">-sL</span> https://deb.nodesource.com/setup_6.x | sudo <span class="literal">-E</span> bash -</span><br></pre></td></tr></table></figure></li><li>安装nodejs和npm</li></ol><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo apt<span class="literal">-get</span> install nodejs<span class="literal">-legacy</span></span><br><span class="line">sudo apt<span class="literal">-get</span> install npm</span><br></pre></td></tr></table></figure><p>(1)安装用于安装nodejs的模块n</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo npm install <span class="literal">-g</span> n</span><br></pre></td></tr></table></figure><p>(2)通过n模块安装指定的nodejs</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">sudo n latest</span><br><span class="line">sudo n stable</span><br><span class="line">sudo n lts</span><br></pre></td></tr></table></figure><p>(3)升级npm为最新版本</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo npm install npm@latest <span class="literal">-g</span></span><br></pre></td></tr></table></figure><ol start="3"><li>确认</li></ol><p>最后通过node -v ,npm -v确认版本,nodejs版本要在6.3以上才可以</p><p>接下来在bin下面创建个软连接</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">/usr/local/bin/</span><br><span class="line">ln <span class="literal">-s</span> /opt/node<span class="literal">-v8</span>.<span class="number">11.1</span><span class="literal">-linux</span><span class="literal">-x64</span>/bin/hexo</span><br></pre></td></tr></table></figure><h2 id="Apache2"><a href="#Apache2" class="headerlink" title="Apache2"></a>Apache2</h2><ol><li>下载</li></ol><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo apt<span class="literal">-get</span> update</span><br><span class="line">sudo apt<span class="literal">-get</span> install apache2</span><br></pre></td></tr></table></figure><ol start="2"><li>环境配置<br>(1)/etc/apache2/apache2.conf 是主要配置文件(这个文件的末尾可以看到,include了其它所有的配置文件)。<br>(2)/etc/apache2/ports.conf 始终包含在主配置文件中。它用于确定传入连接的侦听端口,默认为80,我们一般都会重新配置新的端口。<br>(3)apache2的默认web目录:/var/www/html。(在/etc/apache2/sites-enabled/000-default.conf 里可以看到这个 DocumentRoot /var/www/html 配置)<br>(4)设置默认主页的配置文件/etc/apache2/mods-enabled/dir.conf<br>(5)进入到/etc/apache2/sites-available目录下,添加ErrorDocument 404 /404.html,在这里,你的404.html要在DocumentRoot 即可实现自定义404页面<br>按照自己的需求,配置上面的几个文件即可</li><li>开关</li></ol><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo /etc/init.d/apache2 [ <span class="type">start</span> | <span class="type">stop</span> | <span class="type">restart</span> | <span class="type">status</span> ]</span><br><span class="line">service apache2 [ <span class="type">start</span> | <span class="type">stop</span> | <span class="type">restart</span> | <span class="type">status</span> ]</span><br></pre></td></tr></table></figure><ol start="4"><li>验证<br>在浏览器输入IP:端口号验证HTTP服务是否正常<br>正常则会显示Ubantu系统默认http服务网页</li></ol><h2 id="Hexo"><a href="#Hexo" class="headerlink" title="Hexo"></a>Hexo</h2><ol><li>安装</li></ol><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo npm install hexo<span class="literal">-cli</span> <span class="literal">-g</span></span><br></pre></td></tr></table></figure><ol start="2"><li>配置并初始化</li></ol><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">hexo init blog</span><br><span class="line">cd blog</span><br><span class="line">npm install</span><br><span class="line">hexo server</span><br></pre></td></tr></table></figure><p>执行完上面几条命令之后,在浏览器打开地址:<a href="http://localhost:4000/就会看到hexo为你提供的默认主题,则表示安装成功。" target="_blank" rel="noopener">http://localhost:4000/就会看到hexo为你提供的默认主题,则表示安装成功。</a><br>到 <a href="https://hexo.io/themes/" target="_blank" rel="noopener">hexo官网</a> 找个适合自己的主题。下载主题源码到 博客目录/themes/<br>具体的如何更改hexo主题,生成页面和文章可以参考<a href="https://hexo.io/docs/writing.html" target="_blank" rel="noopener">官方文档</a></p>]]></content>
<categories>
<category> 嵌入式 </category>
<category> 博客服务 </category>
</categories>
<tags>
<tag> Hexo </tag>
<tag> 嵌入式 </tag>
<tag> 博客服务 </tag>
</tags>
</entry>
<entry>
<title>搭建自己的嵌入式博客服务器(一)</title>
<link href="/2020/01/31/embedded/blogServer/blogServer1/"/>
<url>/2020/01/31/embedded/blogServer/blogServer1/</url>
<content type="html"><![CDATA[<p>首先介绍下我搭建自己的博客服务器的背景<br> 前段时间逛知乎时看到某位技术大声,将自己的博客搭建在树莓派上,瞬间引起了我的兴趣,毕竟谁不想拥有一个完全属于自己的博客呀。于是就开始准备了,从网上前人的经验得出现有的搭建方案大致如下:</p><a id="more"></a><ul><li><p>linux –操作系统</p></li><li><p>Apache –http服务</p></li><li><p>mysql –数据库管理</p></li><li><p>PHP –后端编程语言</p></li><li><p>花生壳 –内网穿透工具</p><p>不过由于实现过程中的一些问题,我最终的实现方案是下面这个样子</p></li><li><p>linux –操作系统</p></li><li><p>Apache –http服务</p></li><li><p>Hexo –静态网页生成</p></li><li><p>Natfrp –内网穿透工具<br>这里还要介绍下我用的开发板 友善NEO 1GRAM</p></li></ul><p>博客的最终的实现效果<a href="http://linzhipeng.top" target="_blank" rel="noopener">我的博客</a><br>接下里我将分章节简单介绍些搭建步骤</p>]]></content>
<categories>
<category> 嵌入式 </category>
<category> 博客服务 </category>
</categories>
<tags>
<tag> Hexo </tag>
<tag> 嵌入式 </tag>
<tag> 博客服务 </tag>
</tags>
</entry>
</search>