Bläddra i källkod

feat: 多语言、文档迁移测试、主页layout

Carson 10 månader sedan
förälder
incheckning
8de9fab81d
100 ändrade filer med 429 tillägg och 195 borttagningar
  1. 95 26
      .vitepress/config.mts
  2. 9 11
      .vitepress/theme/index.ts
  3. 3 0
      .vitepress/theme/style.css
  4. 0 49
      api-examples.md
  5. 37 0
      components/CustomLayout.vue
  6. 267 0
      components/CustomNavBar.vue
  7. 18 0
      components/HomeContent.vue
  8. 0 24
      index.md
  9. 0 85
      markdown-examples.md
  10. BIN
      media/AI模块/AI屏幕helloworld.jpeg
  11. BIN
      media/AI模块/AI摄像头.jpg
  12. BIN
      media/AI模块/AI模块1.png
  13. BIN
      media/AI模块/AI模块2.png
  14. BIN
      media/AI模块/AI模块3.png
  15. BIN
      media/AI模块/AI模块和屏幕模块和摄像头模块连接.jpg
  16. BIN
      media/AI模块/AI模块和屏幕模块和摄像头模块连接2.jpg
  17. BIN
      media/AI模块/AI模块和屏幕模块连接.jpg
  18. BIN
      media/AI模块/AI模块基础编程.png
  19. BIN
      media/AI模块/AI模块连接.jpeg
  20. BIN
      media/AI模块/AI模板基础1.gif
  21. BIN
      media/AI模块/IOT连接屏幕模块.jpg
  22. BIN
      media/AI模块/LCD屏幕初始化.png
  23. BIN
      media/AI模块/LCD屏幕填充颜色为.png
  24. BIN
      media/AI模块/LCD屏幕方向旋转.png
  25. BIN
      media/AI模块/LCD屏幕模块1.png
  26. BIN
      media/AI模块/LCD屏幕模块2.png
  27. BIN
      media/AI模块/LCD屏幕模块3.png
  28. BIN
      media/AI模块/LCD屏幕进行镜面翻转.png
  29. BIN
      media/AI模块/LED1.png
  30. BIN
      media/AI模块/LED2.png
  31. BIN
      media/AI模块/LED3.png
  32. BIN
      media/AI模块/X Y.png
  33. BIN
      media/AI模块/image6.png
  34. BIN
      media/AI模块/创建图像画布.png
  35. BIN
      media/AI模块/创建空白画布尺寸.png
  36. BIN
      media/AI模块/否则如果.gif
  37. BIN
      media/AI模块/启用AI摄像头.png
  38. BIN
      media/AI模块/在屏幕显示hello world.png
  39. BIN
      media/AI模块/在屏幕显示hello world(1).png
  40. BIN
      media/AI模块/在屏幕显示hello world(2).png
  41. BIN
      media/AI模块/在画布上绘制二维码.png
  42. BIN
      media/AI模块/在画布上绘制十字标.png
  43. BIN
      media/AI模块/在画布上绘制图片.png
  44. BIN
      media/AI模块/在画布上绘制实心圆形.png
  45. BIN
      media/AI模块/在画布上绘制实心矩形.png
  46. BIN
      media/AI模块/在画布上绘制文本.png
  47. BIN
      media/AI模块/在画布上绘制直线.png
  48. BIN
      media/AI模块/在画布上绘制箭头.png
  49. BIN
      media/AI模块/宽 高.png
  50. BIN
      media/AI模块/将LCD屏幕填充颜色为.png
  51. BIN
      media/AI模块/将LCD屏幕填充颜色为2.png
  52. BIN
      media/AI模块/将屏幕颜色填充为.png
  53. BIN
      media/AI模块/将画布铺满颜色.png
  54. BIN
      media/AI模块/屏幕连接AI模块.jpg
  55. BIN
      media/AI模块/按钮1.png
  56. BIN
      media/AI模块/按钮2.png
  57. BIN
      media/AI模块/摄像头10.png
  58. BIN
      media/AI模块/摄像头2.png
  59. BIN
      media/AI模块/摄像头3.png
  60. BIN
      media/AI模块/摄像头4.png
  61. BIN
      media/AI模块/摄像头5.png
  62. BIN
      media/AI模块/摄像头6.png
  63. BIN
      media/AI模块/摄像头7.png
  64. BIN
      media/AI模块/摄像头8.png
  65. BIN
      media/AI模块/摄像头9.png
  66. BIN
      media/AI模块/摄像头模块1.png
  67. BIN
      media/AI模块/摄像头模块2.png
  68. BIN
      media/AI模块/数据线连接AI模块.png
  69. BIN
      media/AI模块/数据线连接电脑.png
  70. BIN
      media/AI模块/显示画布.png
  71. BIN
      media/AI模块/清除屏幕.png
  72. BIN
      media/AI模块/清除画布.png
  73. BIN
      media/AI模块/画点.png
  74. BIN
      media/AI模块/相机初始化.png
  75. BIN
      media/AI模块/系统1.png
  76. BIN
      media/AI模块/系统2.png
  77. BIN
      media/AI模块/系统3.png
  78. BIN
      media/AI模块/系统4.png
  79. BIN
      media/AI模块/系统5.png
  80. BIN
      media/AI模块/系统6.png
  81. BIN
      media/AI模块/红 绿 蓝.png
  82. BIN
      media/AI模块/红绿蓝IOT.png
  83. BIN
      media/AI模块/绘制实心矩形.png
  84. BIN
      media/AI模块/绘制文本.png
  85. BIN
      media/AI模块/绘制条形统计图.png
  86. BIN
      media/AI模块/绘制直线.png
  87. BIN
      media/AI模块/设置画布起始点坐标.png
  88. BIN
      media/AI模块/通电后屏幕模块初始界面.png
  89. BIN
      media/AI模块/颜色.png
  90. BIN
      media/AI模块/麦克风.gif
  91. BIN
      media/AI模块/麦克风1.png
  92. BIN
      media/AI模块/麦克风2.png
  93. BIN
      media/AI模块/麦克风3.png
  94. BIN
      media/IoT蓝牙/使用uuid.png
  95. BIN
      media/IoT蓝牙/蓝牙uuid.png
  96. BIN
      media/LED灯屏/Pics/LED灯屏模块1.png
  97. BIN
      media/LED灯屏/Pics/LED灯屏模块2.png
  98. BIN
      media/LED灯屏/Pics/LED灯屏模块定位.png
  99. BIN
      media/LED灯屏/Pics/与AI模块连接.jpg
  100. BIN
      media/LED灯屏/Pics/与IoT模块连接.jpg

+ 95 - 26
.vitepress/config.mts

@@ -1,32 +1,101 @@
-import { fileURLToPath, URL } from 'node:url'
-import { defineConfig } from 'vitepress'
+import { fileURLToPath, URL } from "node:url";
+import { defineConfig } from "vitepress";
+import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
 
 // https://vitepress.dev/reference/site-config
 export default defineConfig({
-  title: "Cococlass Help Documents",
+  title: "CocoBlockly帮助文档",
   description: "Cococlass help documents",
-  themeConfig: {
-    // https://vitepress.dev/reference/default-theme-config
-    search: {
-      provider: 'local'
-    },
-    nav: [
-      { text: 'Home', link: '/' },
-      { text: 'Examples', link: '/markdown-examples' }
-    ],
+  srcDir: "pages",
 
-    sidebar: [
-      {
-        text: 'Examples',
-        items: [
-          { text: 'Markdown Examples', link: '/markdown-examples' },
-          { text: 'Runtime API Examples', link: '/api-examples' }
-        ]
-      }
+  vite: {
+    publicDir: "../public",
+    plugins: [
+      /* ... */
+      VueI18nPlugin({
+        /* options */
+        // locale messages resource pre-compile option
+        // include: resolve(dirname(fileURLToPath(import.meta.url)), './path/to/src/locales/**'),
+      }),
     ],
-
-    socialLinks: [
-      { icon: 'github', link: 'https://github.com/vuejs/vitepress' }
-    ]
-  }
-})
+    resolve: {
+      alias: [
+        {
+          find: /^.*\/VPNavBar\.vue$/,
+          replacement: fileURLToPath(
+            new URL("../components/CustomNavBar.vue", import.meta.url)
+          ),
+        },
+        { find: '@/', replacement: fileURLToPath(new URL('../', import.meta.url)) },
+      ],
+    },
+  },
+  locales: {
+    root: {
+      label: "简体中文",
+      lang: "zh-CN",
+      themeConfig: {
+        logo: "/logo.png",
+        siteTitle: false,
+        // https://vitepress.dev/reference/default-theme-config
+        // search: {
+        //   provider: 'local'
+        // },
+        // nav: [
+        //   { text: 'Home', link: '/' },
+        //   { text: 'Examples', link: '/markdown-examples' }
+        // ],
+        sidebar: [
+          { text: "关于CocoBlockly X", link: "/docs" },
+          { text: "常见问题解答", link: "/docs/faq" },
+          {
+            text: "开始使用CocoBlockly X",
+            link: "/docs/start-using-cocoblockly-x",
+          },
+          {
+            text: "电子模块基本教学",
+            items: [
+              { text: "todo", link: "/docs" },
+            ],
+          },
+        ],
+        // socialLinks: [
+        //   { icon: 'github', link: 'https://github.com/vuejs/vitepress' }
+        // ]
+      },
+    },
+    "zh-HK": {
+      label: "繁体中文",
+      lang: "zh-HK",
+      themeConfig: {
+        logo: "/logo.png",
+        siteTitle: false,
+        // https://vitepress.dev/reference/default-theme-config
+        // search: {
+        //   provider: 'local'
+        // },
+        // nav: [
+        //   { text: 'Home', link: '/' },
+        //   { text: 'Examples', link: '/markdown-examples' }
+        // ],
+        sidebar: [
+          { text: "什麽是CocoBlockly X", link: "/zh-HK/docs" },
+          { text: "常見問題解答", link: "/zh-HK/docs/faq" },
+          {
+            text: "開始使用CocoBlockly X",
+            link: "/zh-HK/docs/start-using-cocoblockly-x",
+          },
+          {
+            text: "電子模組基本教學",
+            items: [
+              { text: "todo", link: "/zh-HK/docs" },
+            ],
+          },
+        ],
+        // socialLinks: [
+        //   { icon: 'github', link: 'https://github.com/vuejs/vitepress' }
+        // ]
+      },
+    },
+  },
+});

+ 9 - 11
.vitepress/theme/index.ts

@@ -1,17 +1,15 @@
 // https://vitepress.dev/guide/custom-theme
-import { h } from 'vue'
-import type { Theme } from 'vitepress'
-import DefaultTheme from 'vitepress/theme'
-import './style.css'
+import type { Theme } from "vitepress";
+import DefaultTheme from "vitepress/theme";
+import CustomLayout from "../../components/CustomLayout.vue";
+import i18n from "../../plugins/i18n";
+import "./style.css";
 
 export default {
   extends: DefaultTheme,
-  Layout: () => {
-    return h(DefaultTheme.Layout, null, {
-      // https://vitepress.dev/guide/extending-default-theme#layout-slots
-    })
-  },
+  Layout: CustomLayout,
   enhanceApp({ app, router, siteData }) {
+    app.use(i18n);
     // ...
-  }
-} satisfies Theme
+  },
+} satisfies Theme;

+ 3 - 0
.vitepress/theme/style.css

@@ -137,3 +137,6 @@
   --docsearch-primary-color: var(--vp-c-brand-1) !important;
 }
 
+:root {
+  --vp-nav-logo-height: 42px;
+}

+ 0 - 49
api-examples.md

@@ -1,49 +0,0 @@
----
-outline: deep
----
-
-# Runtime API Examples
-
-This page demonstrates usage of some of the runtime APIs provided by VitePress.
-
-The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files:
-
-```md
-<script setup>
-import { useData } from 'vitepress'
-
-const { theme, page, frontmatter } = useData()
-</script>
-
-## Results
-
-### Theme Data
-<pre>{{ theme }}</pre>
-
-### Page Data
-<pre>{{ page }}</pre>
-
-### Page Frontmatter
-<pre>{{ frontmatter }}</pre>
-```
-
-<script setup>
-import { useData } from 'vitepress'
-
-const { site, theme, page, frontmatter } = useData()
-</script>
-
-## Results
-
-### Theme Data
-<pre>{{ theme }}</pre>
-
-### Page Data
-<pre>{{ page }}</pre>
-
-### Page Frontmatter
-<pre>{{ frontmatter }}</pre>
-
-## More
-
-Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata).

+ 37 - 0
components/CustomLayout.vue

@@ -0,0 +1,37 @@
+<script setup lang="ts">
+import { watchEffect } from "vue";
+
+import DefaultTheme from "vitepress/theme";
+import { useI18n } from "vue-i18n";
+import { useData } from "vitepress";
+import i18n from "@/plugins/i18n";
+
+const Layout = DefaultTheme.Layout;
+
+const { lang } = useData();
+const { t } = useI18n();
+watchEffect(() => {
+  i18n.global.locale.value = lang.value;
+});
+</script>
+<template>
+  <Layout>
+    <template #nav-bar-content-before>
+      <div class="content-before">{{ t("帮助中心") }}</div>
+    </template>
+  </Layout>
+</template>
+<i18n locale="zh-HK">
+{
+  "帮助中心": "幫助中心"
+}
+</i18n>
+<style scoped>
+.content-before {
+  color: #2e5aa8;
+  font-size: 16px;
+  font-weight: 600;
+  line-height: 24px;
+  margin-left: 14px;
+}
+</style>

+ 267 - 0
components/CustomNavBar.vue

@@ -0,0 +1,267 @@
+<script lang="ts" setup>
+import { useWindowScroll } from '@vueuse/core'
+import { ref, watchPostEffect } from 'vue'
+import { useData } from 'vitepress/dist/client/theme-default/composables/data'
+import { useSidebar } from 'vitepress/dist/client/theme-default/composables/sidebar'
+import VPNavBarAppearance from 'vitepress/dist/client/theme-default/components/VPNavBarAppearance.vue'
+import VPNavBarExtra from 'vitepress/dist/client/theme-default/components/VPNavBarExtra.vue'
+import VPNavBarHamburger from 'vitepress/dist/client/theme-default/components/VPNavBarHamburger.vue'
+import VPNavBarMenu from 'vitepress/dist/client/theme-default/components/VPNavBarMenu.vue'
+import VPNavBarSearch from 'vitepress/dist/client/theme-default/components/VPNavBarSearch.vue'
+import VPNavBarSocialLinks from 'vitepress/dist/client/theme-default/components/VPNavBarSocialLinks.vue'
+import VPNavBarTitle from 'vitepress/dist/client/theme-default/components/VPNavBarTitle.vue'
+import VPNavBarTranslations from 'vitepress/dist/client/theme-default/components/VPNavBarTranslations.vue'
+
+defineProps<{
+  isScreenOpen: boolean
+}>()
+
+defineEmits<{
+  (e: 'toggle-screen'): void
+}>()
+
+const { y } = useWindowScroll()
+const { hasSidebar } = useSidebar()
+const { frontmatter } = useData()
+
+const classes = ref<Record<string, boolean>>({})
+
+watchPostEffect(() => {
+  classes.value = {
+    'has-sidebar': hasSidebar.value,
+    'home': frontmatter.value.layout === 'home',
+    'top': y.value === 0,
+  }
+})
+</script>
+
+<template>
+  <div class="VPNavBar" :class="classes">
+    <div class="wrapper">
+      <div class="container">
+        <div class="title">
+          <VPNavBarTitle>
+            <template #nav-bar-title-before><slot name="nav-bar-title-before" /></template>
+            <template #nav-bar-title-after><slot name="nav-bar-title-after" /></template>
+          </VPNavBarTitle>
+        </div>
+
+        <div class="content">
+          <div class="content-body">
+            <slot name="nav-bar-content-before" />
+            <VPNavBarSearch class="search" />
+            <VPNavBarMenu class="menu" />
+            <VPNavBarTranslations class="translations" />
+            <VPNavBarAppearance class="appearance" />
+            <VPNavBarSocialLinks class="social-links" />
+            <VPNavBarExtra class="extra" />
+            <slot name="nav-bar-content-after" />
+            <VPNavBarHamburger class="hamburger" :active="isScreenOpen" @click="$emit('toggle-screen')" />
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <div class="divider">
+      <div class="divider-line" />
+    </div>
+  </div>
+</template>
+
+<style scoped>
+.VPNavBar {
+  position: relative;
+  height: var(--vp-nav-height);
+  pointer-events: none;
+  white-space: nowrap;
+  transition: background-color 0.5s;
+}
+
+.VPNavBar:not(.home) {
+  background-color: var(--vp-nav-bg-color);
+}
+
+@media (min-width: 960px) {
+  .VPNavBar:not(.home) {
+    background-color: transparent;
+  }
+
+  .VPNavBar:not(.has-sidebar):not(.home.top) {
+    background-color: var(--vp-nav-bg-color);
+  }
+}
+
+.wrapper {
+  padding: 0 8px 0 24px;
+}
+
+@media (min-width: 768px) {
+  .wrapper {
+    padding: 0 32px;
+  }
+}
+
+@media (min-width: 960px) {
+  .VPNavBar.has-sidebar .wrapper {
+    padding: 0;
+  }
+}
+
+.container {
+  display: flex;
+  justify-content: space-between;
+  margin: 0 auto;
+  max-width: calc(var(--vp-layout-max-width) - 64px);
+  height: var(--vp-nav-height);
+  pointer-events: none;
+}
+
+.container > .title,
+.container > .content {
+  pointer-events: none;
+}
+
+.container :deep(*) {
+  pointer-events: auto;
+}
+
+@media (min-width: 960px) {
+  .VPNavBar.has-sidebar .container {
+    max-width: 100%;
+  }
+}
+
+.title {
+  flex-shrink: 0;
+  height: calc(var(--vp-nav-height) - 1px);
+  transition: background-color 0.5s;
+}
+
+@media (min-width: 960px) {
+  .VPNavBar.has-sidebar .title {
+    position: absolute;
+    top: 0;
+    left: 0;
+    z-index: 2;
+    padding: 0 32px;
+    width: var(--vp-sidebar-width);
+    height: var(--vp-nav-height);
+    background-color: transparent;
+  }
+}
+
+@media (min-width: 1440px) {
+  .VPNavBar.has-sidebar .title {
+    padding-left: max(32px, calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));
+    width: calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px);
+  }
+}
+
+.content {
+  flex-grow: 1;
+}
+
+@media (min-width: 960px) {
+  .VPNavBar.has-sidebar .content {
+    position: relative;
+    z-index: 1;
+    padding-right: 32px;
+    padding-left: var(--vp-sidebar-width);
+  }
+}
+
+@media (min-width: 1440px) {
+  .VPNavBar.has-sidebar .content {
+    padding-right: calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);
+    padding-left: calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width));
+  }
+}
+
+.content-body {
+  display: flex;
+  justify-content: flex-end;
+  align-items: center;
+  height: var(--vp-nav-height);
+  transition: background-color 0.5s;
+}
+
+@media (min-width: 960px) {
+  .VPNavBar:not(.home.top) .content-body {
+    position: relative;
+    background-color: var(--vp-nav-bg-color);
+  }
+
+  .VPNavBar:not(.has-sidebar):not(.home.top) .content-body {
+    background-color: transparent;
+  }
+}
+
+@media (max-width: 767px) {
+  .content-body {
+    column-gap: 0.5rem;
+  }
+}
+
+.menu + .translations::before,
+.menu + .appearance::before,
+.menu + .social-links::before,
+.translations + .appearance::before,
+.appearance + .social-links::before {
+  margin-right: 8px;
+  margin-left: 8px;
+  width: 1px;
+  height: 24px;
+  background-color: var(--vp-c-divider);
+  content: "";
+}
+
+.menu + .appearance::before,
+.translations + .appearance::before {
+  margin-right: 16px;
+}
+
+.appearance + .social-links::before {
+  margin-left: 16px;
+}
+
+.social-links {
+  margin-right: -8px;
+}
+
+.divider {
+  width: 100%;
+  height: 1px;
+}
+
+@media (min-width: 960px) {
+  .VPNavBar.has-sidebar .divider {
+    padding-left: var(--vp-sidebar-width);
+  }
+}
+
+@media (min-width: 1440px) {
+  .VPNavBar.has-sidebar .divider {
+    padding-left: calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width));
+  }
+}
+
+.divider-line {
+  width: 100%;
+  height: 1px;
+  transition: background-color 0.5s;
+}
+
+.VPNavBar:not(.home) .divider-line {
+  background-color: var(--vp-c-gutter);
+}
+
+@media (min-width: 960px) { 
+  .VPNavBar:not(.home.top) .divider-line {
+    background-color: var(--vp-c-gutter);
+  }
+
+  .VPNavBar:not(.has-sidebar):not(.home.top) .divider {
+    background-color: var(--vp-c-gutter);
+  }
+}
+</style>

+ 18 - 0
components/HomeContent.vue

@@ -0,0 +1,18 @@
+<script setup lang="ts">
+import { ref } from "vue";
+const count = ref(0);
+</script>
+<template>
+  <div class="home-content">
+    <span>{{ count }}</span>
+    <button @click="count++">test</button>
+  </div>
+</template>
+
+<style lang="scss" scoped>
+.home-content {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+</style>

+ 0 - 24
index.md

@@ -1,24 +0,0 @@
----
-# https://vitepress.dev/reference/default-theme-home-page
-layout: home
-
-hero:
-  name: "Cococlass Help Documents"
-  text: "Cococlass help documents"
-  tagline: My great project tagline
-  actions:
-    - theme: brand
-      text: Markdown Examples
-      link: /markdown-examples
-    - theme: alt
-      text: API Examples
-      link: /api-examples
-
-features:
-  - title: Feature A
-    details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
-  - title: Feature B
-    details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
-  - title: Feature C
-    details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
----

+ 0 - 85
markdown-examples.md

@@ -1,85 +0,0 @@
-# Markdown Extension Examples
-
-This page demonstrates some of the built-in markdown extensions provided by VitePress.
-
-## Syntax Highlighting
-
-VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting:
-
-**Input**
-
-````md
-```js{4}
-export default {
-  data () {
-    return {
-      msg: 'Highlighted!'
-    }
-  }
-}
-```
-````
-
-**Output**
-
-```js{4}
-export default {
-  data () {
-    return {
-      msg: 'Highlighted!'
-    }
-  }
-}
-```
-
-## Custom Containers
-
-**Input**
-
-```md
-::: info
-This is an info box.
-:::
-
-::: tip
-This is a tip.
-:::
-
-::: warning
-This is a warning.
-:::
-
-::: danger
-This is a dangerous warning.
-:::
-
-::: details
-This is a details block.
-:::
-```
-
-**Output**
-
-::: info
-This is an info box.
-:::
-
-::: tip
-This is a tip.
-:::
-
-::: warning
-This is a warning.
-:::
-
-::: danger
-This is a dangerous warning.
-:::
-
-::: details
-This is a details block.
-:::
-
-## More
-
-Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown).

BIN
media/AI模块/AI屏幕helloworld.jpeg


BIN
media/AI模块/AI摄像头.jpg


BIN
media/AI模块/AI模块1.png


BIN
media/AI模块/AI模块2.png


BIN
media/AI模块/AI模块3.png


BIN
media/AI模块/AI模块和屏幕模块和摄像头模块连接.jpg


BIN
media/AI模块/AI模块和屏幕模块和摄像头模块连接2.jpg


BIN
media/AI模块/AI模块和屏幕模块连接.jpg


BIN
media/AI模块/AI模块基础编程.png


BIN
media/AI模块/AI模块连接.jpeg


BIN
media/AI模块/AI模板基础1.gif


BIN
media/AI模块/IOT连接屏幕模块.jpg


BIN
media/AI模块/LCD屏幕初始化.png


BIN
media/AI模块/LCD屏幕填充颜色为.png


BIN
media/AI模块/LCD屏幕方向旋转.png


BIN
media/AI模块/LCD屏幕模块1.png


BIN
media/AI模块/LCD屏幕模块2.png


BIN
media/AI模块/LCD屏幕模块3.png


BIN
media/AI模块/LCD屏幕进行镜面翻转.png


BIN
media/AI模块/LED1.png


BIN
media/AI模块/LED2.png


BIN
media/AI模块/LED3.png


BIN
media/AI模块/X Y.png


BIN
media/AI模块/image6.png


BIN
media/AI模块/创建图像画布.png


BIN
media/AI模块/创建空白画布尺寸.png


BIN
media/AI模块/否则如果.gif


BIN
media/AI模块/启用AI摄像头.png


BIN
media/AI模块/在屏幕显示hello world.png


BIN
media/AI模块/在屏幕显示hello world(1).png


BIN
media/AI模块/在屏幕显示hello world(2).png


BIN
media/AI模块/在画布上绘制二维码.png


BIN
media/AI模块/在画布上绘制十字标.png


BIN
media/AI模块/在画布上绘制图片.png


BIN
media/AI模块/在画布上绘制实心圆形.png


BIN
media/AI模块/在画布上绘制实心矩形.png


BIN
media/AI模块/在画布上绘制文本.png


BIN
media/AI模块/在画布上绘制直线.png


BIN
media/AI模块/在画布上绘制箭头.png


BIN
media/AI模块/宽 高.png


BIN
media/AI模块/将LCD屏幕填充颜色为.png


BIN
media/AI模块/将LCD屏幕填充颜色为2.png


BIN
media/AI模块/将屏幕颜色填充为.png


BIN
media/AI模块/将画布铺满颜色.png


BIN
media/AI模块/屏幕连接AI模块.jpg


BIN
media/AI模块/按钮1.png


BIN
media/AI模块/按钮2.png


BIN
media/AI模块/摄像头10.png


BIN
media/AI模块/摄像头2.png


BIN
media/AI模块/摄像头3.png


BIN
media/AI模块/摄像头4.png


BIN
media/AI模块/摄像头5.png


BIN
media/AI模块/摄像头6.png


BIN
media/AI模块/摄像头7.png


BIN
media/AI模块/摄像头8.png


BIN
media/AI模块/摄像头9.png


BIN
media/AI模块/摄像头模块1.png


BIN
media/AI模块/摄像头模块2.png


BIN
media/AI模块/数据线连接AI模块.png


BIN
media/AI模块/数据线连接电脑.png


BIN
media/AI模块/显示画布.png


BIN
media/AI模块/清除屏幕.png


BIN
media/AI模块/清除画布.png


BIN
media/AI模块/画点.png


BIN
media/AI模块/相机初始化.png


BIN
media/AI模块/系统1.png


BIN
media/AI模块/系统2.png


BIN
media/AI模块/系统3.png


BIN
media/AI模块/系统4.png


BIN
media/AI模块/系统5.png


BIN
media/AI模块/系统6.png


BIN
media/AI模块/红 绿 蓝.png


BIN
media/AI模块/红绿蓝IOT.png


BIN
media/AI模块/绘制实心矩形.png


BIN
media/AI模块/绘制文本.png


BIN
media/AI模块/绘制条形统计图.png


BIN
media/AI模块/绘制直线.png


BIN
media/AI模块/设置画布起始点坐标.png


BIN
media/AI模块/通电后屏幕模块初始界面.png


BIN
media/AI模块/颜色.png


BIN
media/AI模块/麦克风.gif


BIN
media/AI模块/麦克风1.png


BIN
media/AI模块/麦克风2.png


BIN
media/AI模块/麦克风3.png


BIN
media/IoT蓝牙/使用uuid.png


BIN
media/IoT蓝牙/蓝牙uuid.png


BIN
media/LED灯屏/Pics/LED灯屏模块1.png


BIN
media/LED灯屏/Pics/LED灯屏模块2.png


BIN
media/LED灯屏/Pics/LED灯屏模块定位.png


BIN
media/LED灯屏/Pics/与AI模块连接.jpg


BIN
media/LED灯屏/Pics/与IoT模块连接.jpg


Vissa filer visades inte eftersom för många filer har ändrats